参与链上 pDAO 提案

任何具有非零投票权的节点都可以随时提出或参与 pDAO 提案。提案可以是以下类型之一:

  • 更改 pDAO 设置
  • 一次性国库支出
  • 重复国库支出(管理委员会)
  • 安全委员会成员资格

有关更多详细信息和理由,请参阅提案类型。重要的是要理解,pDAO 提案是一个链上实体,旨在在协议层面执行变更。

治理流程

提案应在进入链上之前通过治理流程进行预告。

对 Rocket Pool 协议的更改使用严格但透明的治理流程进行提议、投票和执行。该流程始于 Discord 社区内对一个想法的非正式讨论。然后,这个想法发展到 Discord 上的 #governance 频道和 DAO Forum 上的正式讨论,在那里它经过彻底的研究、建模和审查,为 Rocket Pool 改进提案 (RPIP) 做准备。随后,准备 RPIP 草案并由指定的 RPIP 审查者审查,以确保其质量和向 DAO 展示的准备情况。然后将草案提案提交给论坛上的 DAO 进行进一步审查、反馈和纳入任何必要的更改。一旦提案根据社区意见进行了完善,就会在 DAO 论坛上进行投票,以衡量最终确定 RPIP 文本的准备情况。如果投票通过,表明社区批准,RPIP 将被标记为最终版本,并准备好进行 Protocol DAO 投票,该投票通过 Snapshot 进行,以确定是否应实施该提案。

从这里开始,Oracle DAO 将提出链上提案。Protocol DAO、Oracle DAO 和社区有一个审查提案的窗口期。如果达成共识,则执行提案并将更改应用于协议。

可以在 Rocket Pool 网站上找到此流程的便捷可视化表示。

前置条件

请在继续之前阅读提案的生命周期。它将解释所有投票期之间的差异以及在每个期间可以采取的行动。

本页的其余部分将引导您完成参与链上 pDAO 提案所需的步骤。

初始化投票

如果您是在 Houston 升级之前注册的节点运营商,则需要初始化投票以解锁投票权。请记住,拥有至少一个 minipool 是拥有投票权的要求。

rocketpool pdao initialize-voting

此命令将显示以下提示。请仔细阅读:

Thanks for initializing your voting power!

You have two options:

1. Vote directly (delegate vote power to yourself)
   This will allow you to vote on proposals directly,
   allowing you to personally shape the direction of the protocol.

2. Delegate your vote
   This will delegate your vote power to someone you trust,
   giving them the power to vote on your behalf. You will have the option to override.

You can see a list of existing public delegates at https://delegates.rocketpool.net,
however, you can delegate to any node address.

Learn more about how this all works via: /zh/pdao/participate#participating-in-on-chain-pdao-proposals

Please type `direct` or `delegate` to continue:
  • 如果您回复 direct,投票权将初始化到您的节点,您将能够直接对 Protocol DAO 提案进行投票。
  • 如果您回复 delegate,您将有机会通过在同一笔交易中初始化投票和设置委托人来节省一些 gas。

您只需执行一次此操作。它为节点配置初始快照信息。在您初始化投票后,采取的每个操作都将更新您节点的快照信息。一旦您的投票权被初始化,您可以使用以下 smartnode 命令检查您拥有多少投票权:

rocketpool pdao status
注意

每当创建新提案时,都会创建一个投票树,代表网络投票权和委托信息的快照,与新提案一起创建。这意味着如果提案是在您初始化投票之前提出的,则您节点的投票权将不会包含在提案中。rocketpool pdao status 将显示您节点在最新区块的投票权,这可能代表也可能不代表您在特定提案上的投票权。

自动初始化投票权

Smartnode 版本 1.13.8 引入了一项新功能 自动初始化投票权,旨在自动初始化尚未初始化的节点的投票权。自动初始化的投票权是自我委托的。可以通过运行 rocketpool service config 并导航到 Smartnode and TX Fees 部分在 Smartnode 设置中配置此功能。

Auto-Init Vote Power Gas Threshold 是此自动交易的限制(以 gwei 为单位)。您可以通过将阈值设置为 0 来选择退出此任务。如果您的节点在 Houston 升级后注册或投票权已启用,请随时选择退出。

设置您的 Snapshot 信号地址

设置您的 Snapshot 信号地址将允许您在浏览器或移动设备上参与 Snapshot 投票,而无需将节点密钥暴露给热钱包。

需要准备一些东西:

  • 您的节点地址
  • 您想用于 snapshot 投票的地址(信号地址)

您将签署一条消息,说明您的节点地址可以委托给新地址。此消息表明您打算使用您的钱包地址作为 Snapshot 信号地址。

从下面的选项卡中选择您正在使用的网络。

Hoodi Testnet
Mainnet
如果您在 Hoodi 测试网上尝试此操作,可以在此页面上签名:https://testnet.node.rocketpool.net/signalling-address
警告

不要将节点的私钥加载到热钱包中。请选择另一个账户作为您的信号地址。设置信号地址后,您可以使用它在 Snapshot 上使用节点的投票权进行投票。

首先,使用 MetaMask、WalletConnect 或网站支持的任何其他方法将您想用作信号地址的地址连接到网站。然后,您将看到此对话框以查找您的节点地址。

接下来,您将输入您的节点地址,然后单击橙色的"Find"按钮。这将检查该地址是否为已注册的节点,然后将您带到下一步。

提示

在执行此操作之前,请确保您拥有正确的节点地址! 如果您需要确认节点的地址,可以使用 rocketpool node status 命令通过 CLI 快速检索。

登录并确认节点地址后,您将看到您的 Snapshot 信号地址。它应该与您登录网站的账户相同。在继续之前,请仔细检查这是否正确。一旦确信您已登录到所需的账户,请单击橙色的"Sign Message"按钮。您将在钱包扩展程序中看到一个提示,要求签署以下消息:

`snapshot signalling address` may delegate to me for Rocket Pool governance

签名不会花费任何 gas,但设置会花费。签名后,前端将为您提供一个命令,粘贴到 smartnode 中。继续并将其粘贴到 smartnode 的 CLI 中,然后按照提示的步骤操作。该命令应如下所示:

rocketpool pdao set-signalling-address
`snapshot signalling address`
`EIP712 signature`

如果您在 CLI 中看到此消息,则一切就绪!

The node's signalling address was successfully set to `snapshot signalling address`
提示

如果您不小心关闭了网站或丢失了命令,请不要担心。您可以简单地重复这些步骤,并使用相同的节点地址和信号地址再次签名。前端使用 ethers 库中的 signer.Signmessage(),这意味着您的签名对于相同的输入是确定性的。单击此处了解更多信息。

清除信号地址非常简单,只需在 CLI 中使用此命令:

rocketpool pdao clear-signalling-address

允许 RPL 锁定

如果您只对提案进行投票感兴趣,则可以忽略此步骤。只有那些希望提出或挑战提案的人才需要允许 RPL 锁定。

提出和挑战需要 RPL 锁定。默认情况下,出于任何目的锁定 RPL 都将被禁用。节点运营商将通过启用从其节点或主要提款地址锁定 RPL 来选择参与治理活动。您可以在 Smartnode 中使用此命令来执行此操作:

rocketpool node allow-rpl-locking

这将提示您允许在创建或挑战治理提案时锁定 RPL。相反,您可以使用以下命令选择退出 RPL 锁定:

rocketpool node deny-rpl-locking
注意

锁定的 RPL 在奖励、投票和抵押品要求方面与常规质押的 RPL 作用相同。锁定的 RPL 不计入提取 RPL 的阈值。

委托投票权

节点运营商可以选择将其投票权委托给另一个节点运营商。唯一的要求是您的委托人是注册节点。

要将链上投票权委托给另一个节点,请使用以下命令:

rocketpool pdao set-voting-delegate `address`
注意

如果您已将投票权委托给另一个节点运营商,则可以通过将委托地址设置为您自己节点的地址来重置此设置。

  • 在提案的第 1 阶段:投票者委托人可以对提案进行投票。
  • 在提案的第 2 阶段:已委托投票的节点运营商有机会推翻其委托人的投票(如果他们不同意)。

如果您是具有委托投票权的节点运营商,则必须在投票第 1 阶段进行投票,委托的投票权才能计入提案。您在第 1 阶段的投票价值为您的本地投票权 + 委托投票权。您在第 2 阶段的投票仅价值您的本地投票权

创建提案

为了有资格提出提案,节点必须满足一些要求:

  • 包含在快照中(通过初始化投票或在 Houston 后注册)
  • 必须至少有一个 minipool
  • 具有非零投票权
  • 已允许 RPL 锁定
  • 拥有大于提案保证金的 RPL 质押(减去任何已锁定的 RPL)

提案的存在是为了在协议层面更改参数和执行代码!在链上创建提案之前,应该通过治理流程进行讨论并达成共识。

使用命令 rocketpool pdao propose 调出选项菜单

COMMANDS:
   rewards-percentages, rp      Propose updating the RPL rewards allocation percentages for node operators, the Oracle DAO, and the Protocol DAO
   one-time-spend, ots          Propose a one-time spend of the Protocol DAO's treasury
   recurring-spend, rs          Propose a recurring spend of the Protocol DAO's treasury
   recurring-spend-update, rsu  Propose an update to an existing recurring spend plan
   security-council, sc         Modify the security council
   setting, s                   Make a Protocol DAO setting proposal

这些命令中的每一个都会提示您输入一系列输入以创建所需的提案。在本指南中,我们将邀请一个节点加入安全委员会作为示例。要提出邀请节点加入安全委员会的提案,您将使用以下命令:

rocketpool pdao propose security-council invite

请记住,此步骤会根据提案类型略有不同。此特定命令:rocketpool pdao propose security-council invite 将提示您输入 ID,然后输入成员地址。

Please enter an ID for the member you'd like to invite: (no spaces)
test-member

Please enter the member's address:
0xBdbcb42DD8E39323a395B2B72d2c8E7039f1F145

... gas estimations ...

Are you sure you want to propose inviting test-member (0xBdbcb42DD8E39323a395B2B72d2c8E7039f1F145) to the security council? [y/n]

在此包含在区块中后,将创建 pDAO 提案!提案将在创建时进入投票延迟期

查看提案的状态

每个提案都分配有一个 proposalID。在这种情况下,我们邀请 0xBdbc... 加入安全委员会的提案用 ID 71 表示。有几种方法可以查看提案的状态。一种方法将显示每个 pdao 提案及其状态(待处理、成功、已执行等)的列表。第二种方法显示有关特定提案的深入详细信息。

查看提案列表
查看提案详情

要列出所有提案,请使用以下命令:

rocketpool pdao proposals list

这将显示所有提案及其状态的列表

1 Pending proposal(s):

71: invite test-member (0xBdbcb42DD8E39323a395B2B72d2c8E7039f1F145) to the security council - Proposed by:
0x681B8BBf08708e64694005c7Dc307b381b4D1A7D

Succeeded proposal(s):

Executed proposal(s):

Destroyed proposal(s):

Quorum not Met proposal(s):

Defeated proposal(s):

Expired proposal(s):

在这里,我们可以看到我们的提案 invite test-member 的 ID 为 71,处于待处理状态。在此状态下,挑战者可以对提案者提供的 merkle pollard(用于计算投票权)的有效性提出异议。当 proposal.vote.delay.time 结束时,提案将过渡到活跃投票阶段。请随时查看提案的生命周期以进行复习。

对提案进行投票

在投票期间,节点运营商委托人可以使用四个选项之一进行投票:

1. Abstain: 投票者的投票权计入法定人数,但既不赞成也不反对提案。
2. For: 投票者投票赞成执行提案。
3. Against: 投票者投票反对执行提案。
4. Veto: 投票者投票反对提案,并表明他们认为该提案是垃圾邮件或恶意的。

他们的投票权将应用于他们选择的选项。投票权是"有效 RPL 质押"的函数。可以在 rocketpool-research 仓库中找到更详细的阅读材料。

注意

如果您是具有委托投票权的节点运营商,则必须在投票第 1 阶段进行投票,委托的投票权才能计入提案。您在第 1 阶段的投票价值为您的本地投票权 + 委托投票权。您在第 2 阶段的投票仅价值您的本地投票权。请记住,节点只能对提案投票一次,因此请仔细选择。

使用此命令进行投票:

rocketpool pdao proposals vote

如果至少有一个提案处于活跃投票阶段,您将被提示选择要投票的提案。菜单应显示您的节点有资格投票的所有提案:

1: proposal 71 (message: 'invite test-member', payload: proposalSecurityInvite(test-member,0xBdbcb42DD8E39323a395B2B72d2c8E7039f1F145), phase 1 end: 14 Mar 24 05:40 UTC, vp required: 0.00, for: 0.00, against: 0.00, abstained: 0.00, veto: 0.00, proposed by: 0x681B8BBf08708e64694005c7Dc307b381b4D1A7D)
2: proposal 72 (message: 'replace langers-not-his-eoa (0xaC1396c21Eaf6630113516C69d63b7CB59B98b3E) on the security council with tpan (0x6E9E4Cc0A8172349E049128574E1fb85B8D3CE9E)', payload: proposalSecurityReplace(0xaC1396c21Eaf6630113516C69d63b7CB59B98b3E,tpan,0x6E9E4Cc0A8172349E049128574E1fb85B8D3CE9E), phase 1 end: 14 Mar 24 05:40 UTC, vp required: 0.00, for: 0.00, against: 0.00, abstained: 0.00, veto: 0.00, proposed by: 0xe2fC31d61E28BB16c0857D4682AB3616FA7A793d)
3: proposal 73 (message: 'set proposal.vote.delay.time', payload: proposalSettingUint(rocketDAOProtocolSettingsProposals,proposal.vote.delay.time,60), phase 1 end: 14 Mar 24 05:41 UTC, vp required: 0.00, for: 0.00, against: 0.00, abstained: 0.00, veto: 0.00, proposed by: 0x681B8BBf08708e64694005c7Dc307b381b4D1A7D)

选择一个选项后,系统将询问您如何进行投票。

How would you like to vote on the proposal?
1: Abstain
2: In Favor
3: Against
4: Veto

选择一个选项将显示您的投票权,然后提示您发送交易:

Your current voting power: 20123617964

+============== Suggested Gas Prices ==============+
| Avg Wait Time |  Max Fee  |    Total Gas Cost    |
| 15 Seconds    | 76 gwei   | 0.0176 to 0.0265 ETH |
| 1 Minute      | 56 gwei   | 0.0127 to 0.0190 ETH |
| 3 Minutes     | 56 gwei   | 0.0127 to 0.0190 ETH |
| >10 Minutes   | 56 gwei   | 0.0127 to 0.0190 ETH |
+==================================================+
These prices include a maximum priority fee of 2.00 gwei.
Please enter your max fee (including the priority fee) or leave blank for the default of 56 gwei:

一旦交易包含在区块中,您就已成功对提案进行投票!此时,您可以使用 rocketpool pdao proposal details <proposal-id> 查看提案的状态。提案需要达到 proposal.quorum 所需投票权和多数赞成投票权才能成功。

Voting power required:  140970562215
Voting power for:       197980809837
Voting power against:   0
Voting power abstained: 0
Voting power against:   0
Node has voted:         In Favor

对于上面的示例,投票权需要超过 140970562215 投票权的法定人数。有 197980809837 投票权赞成,没有反对或弃权的投票。该提案有望成功,并准备在 proposal.vote.phase2.time 结束前执行。

执行成功的提案

恭喜!您的提案通过了!现在剩下要做的就是执行提案。请记住,任何人都可以成为提案的执行者。要执行成功的提案,请输入以下命令:

rocketpool pdao execute

选择一个选项将提示您发送交易。一旦此交易包含在区块中,更改将应用于 Rocket Pool 协议!

Please select a proposal to execute:
1: All available proposals
2: proposal 71 (invite test-member (0xBdbcb42DD8E39323a395B2B72d2c8E7039f1F145) to the security council)',
proposalSecurityInvite(test-member,0xBdbcb42DD8E39323a395B2B72d2c8E7039f1F145)

领取保证金和奖励

提案者或挑战者可以在提案结束时领取其保证金。根据提案的结果,提案者或挑战者可能能够或不能够领取其 proposal.bondproposal.challenge.bond

以下是一些规定可以领取保证金的条件的规则:

  • 如果提案被击败,提案者将没收其保证金,该保证金将按比例分配给促成提案失败的挑战者。所有其他挑战者仅收回其保证金。
  • 促成提案失败意味着挑战者提交了一个索引,该索引后来被提案者无法回应挑战而证明是错误的。可能存在多个错误索引,但只有那些导致提案失败的索引才能分享奖励。所有其他挑战者仅收回其保证金。
  • 如果挑战者挑战节点,提案者做出回应,并且提案未被击败。提案者可以从无效挑战中领取挑战保证金。
  • 如果提案被击败,提案者将没收其保证金,该保证金将按比例分配给促成提案失败的挑战者。

使用此命令领取保证金:

rocketpool pdao claim-bonds

这将显示您有资格领取保证金的每个提案。您可以从指定的提案中领取保证金,也可以从所有符合条件的提案中领取保证金和奖励。

Please select a proposal to unlock bonds / claim rewards from:
1: All available proposals
2: Proposal 42 (proposer: true, unlockable: 21.00 RPL, rewards: 0.00 RPL)
3: Proposal 43 (proposer: true, unlockable: 21.00 RPL, rewards: 0.00 RPL)
4: Proposal 44 (proposer: true, unlockable: 21.00 RPL, rewards: 0.00 RPL)
5: Proposal 46 (proposer: true, unlockable: 21.00 RPL, rewards: 0.00 RPL)
6: Proposal 47 (proposer: true, unlockable: 21.00 RPL, rewards: 0.00 RPL)
7: Proposal 48 (proposer: true, unlockable: 21.00 RPL, rewards: 0.00 RPL)
8: Proposal 49 (proposer: true, unlockable: 21.00 RPL, rewards: 0.00 RPL)

选择一个选项后,您将收到网络当前 gas 成本建议的提示;确认您的 gas 价格选择并按照其余提示操作。

+============== Suggested Gas Prices ==============+
| Avg Wait Time |  Max Fee  |    Total Gas Cost    |
| 15 Seconds    | 26 gwei   | 0.1591 to 0.2387 ETH |
| 1 Minute      | 21 gwei   | 0.1261 to 0.1891 ETH |
| 3 Minutes     | 21 gwei   | 0.1261 to 0.1891 ETH |
| >10 Minutes   | 21 gwei   | 0.1261 to 0.1891 ETH |
+==================================================+

These prices include a maximum priority fee of 2.00 gwei.
Please enter your max fee (including the priority fee) or leave blank for the default of 21 gwei:


Using a max fee of 21.00 gwei and a priority fee of 2.00 gwei.
Are you sure you want to claim bonds and rewards from 7 proposals? [y/n]

请注意,如果您选择第一个选项来领取所有可用提案,它们将分别执行,而不是作为一笔交易。

创建定期国库支出

您需要准备一些输入来创建定期国库支出:

  • 合约名称
  • 接收者的地址
  • 每期发送的 RPL 数量
  • 定期付款的开始时间(作为 UNIX 时间戳)
  • 每个付款期的长度,以小时/分钟/秒为单位(例如,168h0m0s)
  • 付款期数
信息

接收者需要记下合约名称以领取付款。不过不用担心,这些信息会被存储,可以使用命令 rocketpool pdao proposals details <proposal-id> 检索

要提出设置定期国库支出的提案,请使用以下 smartnode 命令并按照提示操作:

rocketpool pdao propose recurring-spend

以下是整体的样子:

Please enter a contract name for this recurring payment:
test-recurring-spend

Please enter a recipient address for this recurring payment:
0x681B8BBf08708e64694005c7Dc307b381b4D1A7D

Please enter an amount of RPL to send to 0x681B8BBf08708e64694005c7Dc307b381b4D1A7D per period:
1

Your value will be multiplied by 10^18 to be used in the contracts, which results in:

[1000000000000000000]

Please make sure this is what you want and does not have any floating-point errors.

Is this result correct? [y/n]
y

Please enter the time that the recurring payment will start (as a UNIX timestamp):
1717935233

The provided timestamp corresponds to 2024-06-09 12:13:53 +0000 UTC - is this correct? [y/n]
y

Please enter the length of each payment period in hours / minutes / seconds (e.g., 168h0m0s):
720h

Please enter the total number of payment periods:
24

输入所有必需的输入后,将提出创建定期付款的提案。当 pDAO 通过并执行此提案时,接收者将从 2024-06-09 12:13:53 +0000 UTC 开始每 720 小时分配 1 RPL,总共 24 次付款

领取定期国库支出

领取定期付款应该非常简单!导航到我们的前端工具这里进行操作。如果您在 Hoodi 测试网上尝试此操作,请改用链接。

进入网站后,单击 connect wallet 按钮。请阅读并接受服务条款和隐私政策,这将启用不同的连接方式,然后单击连接 metamask

MetaMask 将提示您选择一个账户连接到网站。登录后,您需要输入合约名称。这样做将显示所有相关详细信息。请务必仔细检查接收者的地址。任何人都可以调用领取函数,但每个付款合约都将有一个指定的接收者来分配 RPL。

您可以随时领取付款,您将获得截至最近期间的未领取 RPL 总额。或者,您可以等到所有期间都过去后一次性收集所有付款,以节省 gas。

准备好后,只需按大橙色领取按钮,然后在 metamask(或您首选的钱包)中查看交易。完成后,一切就绪!