安全委员会第 0 阶段多重签名仪式

本文档是执行由链上治理批准的Security Council Phase 0的剧本,指导Optimism安全委员会成员如何使用Ledger硬件钱包对交易进行签名,并验证交易的正确性,最后将签名发送给执行者完成链上操作,涉及更新仓库、设置Ledger、模拟和验证交易、批准签名以及发送输出等步骤。

安全委员会阶段 0 多重签名仪式。

状态:草案,未准备好签署

[!IMPORTANT] !!! 尚不要使用此剧本进行签名,因为 安全委员会成员批准提案尚未通过,并且 最终的多重签名尚未设置。

目标

这是用于执行经治理批准的安全委员会阶段 0 的剧本。 有两个与此相关的治理提案:

  1. 安全委员会:投票 #1
  2. 安全委员会成员批准

两者都应被视为真理来源,并由多重签名者用于验证链上操作的正确性。

批准交易

1. 更新 repo 并移动到此演练任务的相应文件夹:

cd superchain-ops
git pull
just install
cd eth/1-security-council-phase-0

2. 设置 Ledger

你的 Ledger 需要连接并解锁。 需要在 Ledger 上打开 Ethereum 应用程序,并显示消息“Application is ready”。

3. 模拟和验证交易

确保你的 ledger 仍然解锁并运行以下命令。

请记住,默认情况下,just 使用从 /0(第一个 nonce)派生的地址运行。 如果你希望使用其他帐户,请运行 just simulate [X],其中 X 是你要使用的地址的派生路径。

just simulate

你将从输出中看到一个“Simulation link”。

将此 URL 粘贴到你的浏览器中。 可能会提示你选择一个项目,任何项目都可以。 如有必要,你可以创建一个。

点击“Simulate Transaction”。

我们将执行 3 项验证,并提取域哈希和消息哈希以在你的 Ledger 上批准:

  1. 验证模拟的完整性。
  2. 验证状态差异的正确性。
  3. 验证并提取域哈希和消息哈希以进行批准。
3.1. 验证模拟的完整性。

确保你位于 Tenderly 模拟的“Overview”选项卡上,要验证模拟的完整性,我们需要检查以下内容:

  1. “Network”:检查网络是否为 Ethereum Mainnet。
  2. “Timestamp”:检查模拟是否在具有最近时间戳(即,接近你运行脚本的时间)的区块上执行。
  3. “Sender”:检查显示的地址是否为你的签名者帐户。 如果不是,你需要确定它在你的 ledger 上的地址列表中是哪个“数字”。 默认情况下,脚本将假定派生路径为 m/44'/60'/0'/0/0。 通过使用 just simulate 1 调用脚本,它将使用 m/44'/60'/1'/0/0 代替来派生地址。

3.2. 验证状态差异的正确性。

现在点击“State”选项卡。 验证:

  1. 在地址 0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A 处只有一个状态覆盖,它将存储槽 0x4 覆盖为新值 0x1。 此覆盖仅旨在将 Foundation 多重签名的 quorum 阈值更改为 1,以便我们可以对执行进行 Tenderly 模拟,
  2. ProxyAdmin 合约在 0x543ba4aadbab8f9025686bd03993043599c6fb04_owner 被更改为新的多重签名,并且此新多重签名的配置正确地实现了两个批准的提案:
    1. 安全委员会:投票 #1
    2. 安全委员会成员批准
  3. 其他状态更改都只是 nonce 更改。

如果这是一个正常操作,那么所有这些地址都应该成为批准此升级的 Optimism 治理投票的一部分。

3.3. 提取域哈希和消息哈希以进行批准。

现在我们已经验证了交易执行了正确的操作,我们需要提取域哈希和消息哈希以进行批准。

返回“Overview”选项卡,并找到 GnosisSafe.checkSignatures 调用。 此调用的 data 参数包含将在你的 Ledger 中显示的域哈希和消息哈希。

这是一个示例屏幕截图。 请注意,哈希值可能不同:

它将是 0x1901、域哈希和消息哈希的串联:0x1901[domain hash][message hash]

记下此值。 你需要将其与签名时 Ledger 屏幕上显示的值进行比较。

4. 批准你的 ledger 上的签名

验证完成后,就可以实际签署交易了。 确保你的 ledger 仍然解锁并运行以下命令:

just sign # or just sign <hdPath>

[!IMPORTANT] 这是剧本中安全最关键的部分:确保以下两个位置中的域哈希和消息哈希匹配:

  1. 在你的 Ledger 屏幕上。
  2. 在 Tenderly 模拟中。 你应该使用与验证状态差异时使用的 Tenderly 模拟相同的模拟,而不是打开控制台中打印的新模拟。

无需验证控制台中打印的任何内容。 也不需要打开新的 Tenderly 模拟链接。

验证后,签署交易。 你将在控制台中看到 DataSignerSignature。 格式应如下所示:

Data:  <DATA>
Signer: <ADDRESS>
Signature: <SIGNATURE>

仔细检查签名者地址是否正确。

5. 将输出发送给协调员

链上未发生任何事情 - 这些是链下签名,将由协调员收集以供执行。 一旦收集到足够数量的签名,任何人都可以执行,因此协调员将为方便起见进行最终执行。

与协调员分享 DataSignerSignature,恭喜,你已完成!

[仅供协调员使用] 如何执行演练

[演练后] 执行输出

  1. 从所有参与的签名者处收集输出。
  2. 连接所有签名并将其导出为 SIGNATURES 环境变量,即 export SIGNATURES="0x[SIGNATURE1][SIGNATURE2]..."
  3. 运行 just execute 0 # or 1 or ... 以在链上执行交易。

例如,如果 quorum 为 2 并且你获得以下输出:

Data:  0xDEADBEEF
Signer: 0xC0FFEE01
Signature: AAAA
Data:  0xDEADBEEF
Signer: 0xC0FFEE02
Signature: BBBB

然后你应该运行

export SIGNATURES="0xAAAABBBB"
just execute 0 # or 1 or ...
  • 原文链接: github.com/ethereum-opti...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
ethereum-optimism
ethereum-optimism
江湖只有他的大名,没有他的介绍。