Skip to content

使用作者映射预编译交互

Precomiled Contracts Banner

概览

Moonbeam上的作者映射预编译合约允许收集人候选人通过熟悉且易于使用的Solidity接口,将会话密钥映射至用于支付区块奖励的Moonbeam地址。这将使候选人使用Ledger或任何与Moonbeam兼容的以太坊钱包完成作者映射。但是,建议您在实体隔离的设备上生成您的密钥。更多信息请参考收集人要求页面的账户要求部分

要成为收集人候选人,您必须运行一个收集人节点。在生成您的会话密钥并将其映射到您的账户之前,您也需要加入一个候选人池,提交一笔保证金并完全同步您的节点。在映射会话密钥时需要支付一笔额外的费用

预编译位于以下地址:

0x0000000000000000000000000000000000000807
0x0000000000000000000000000000000000000807
0x0000000000000000000000000000000000000807

注意事项

在Moonbeam使用预编译合约时,可能会出现一些意想不到的后果。 请参阅安全注意事项 页面了解更多信息。

作者映射Solidity接口

AuthorMappingInterface.sol是一个Solidity接口,允许开发者与预编译的方法交互。

  • removeKeys() — 移除作者ID和会话密钥。替代已弃用的clearAssociation extrinsic
  • setKeys(bytes memory keys) — 接受调用author_rotateKeys的结果,这是您的Nimbus和VRF密钥的串联公钥,并立刻设置作者ID和会话密钥。在密钥轮换或迁移后会非常有用。调用setKeys需要一笔保证金。替代已弃用的addAssociationupdateAssociation extrinsics

以下方式将被弃用,但仍将存在以实现向后兼容性:

  • addAssociation(bytes32 nimbusId) — 将您的作者ID从交易发送处映射到H160账户,确保这是私钥的真正所有者。这需要一笔保证金。此方法通过将keys默认设置为作者ID来维持向后兼容性
  • updateAssociation(bytes32 oldNimbusId, bytes32 newNimbusId) — 将映射从旧的作者ID更新为新的作者ID。在密钥轮换或迁移后会非常有用。这将自动执行addclear关联的extrinsics,无需第二笔保证金便能启用密钥轮换。此方法通过将newKeys默认设置为作者ID来维持向后兼容性
  • clearAssociation(bytes32 nimbusId) — 清除作者ID与发送交易的H160账户的关联,该帐户需要是该作者ID的所有者。同时,将退还保证金

需要的保证金

要跟随本教程操作,您将需要加入候选人池并将您的会话密钥映射到您的H160以太坊格式账户。执行这两个步骤需要两笔保证金。

加入候选人池的最低保证金设置如下:

100000 GLMR
500 MOVR
500 DEV

用您的账户映射您的会话密钥时会发送一笔保证金。此保证金由每个会话密钥注册时获得。保证金设置如下:

10000 GLMR
100 MOVR
100 DEV

与Solidity接口交互

查看先决条件

以下示例将在Moonbase Alpha上演示,但操作步骤也同样适用于Moonbeam和Moonriver。您需要准备以下内容:

如之前所述,您可以使用Ledger将其连接至MetaMask,详情请参考Ledger教程将您的Ledger导入MetaMask。请注意,不建议您使用Ledger用于生产目的。更多信息请参考收集人要求页面的账户要求部分

生成会话密钥

为了符合Substrate标准,Moonbeam收集人的会话密钥为SR25519。本教程将向您展示如何创建/转换与收集人节点相关联的会话密钥。

首先,请确保您正在运行收集人节点。开始运行收集人节点后,您的终端应出现类似以下日志:

Collator Terminal Logs

接下来,通过使用author_rotateKeys方法将RPC调用发送到HTTP端点来创建/转换会话密钥。当您调用 author_rotateKeys 时,结果是两个密钥的大小。回复将包含串联的作者ID(Nimbus 密钥)和VRF密钥。作者ID 用于签署区块并创建与您的H160帐户的关联,以便支付区块奖励。区块生产需要VRF密钥。

举例而言,如果您的收集人HTTP端点位于端口9933,则JSON-RPC调用可能如下所示:

curl http://127.0.0.1:9933 -H \
"Content-Type:application/json;charset=utf-8" -d \
  '{
    "jsonrpc":"2.0",
    "id":1,
    "method":"author_rotateKeys",
    "params": []
  }'

收集人节点应使用串联的新会话密钥的相应公钥进行回复。0x前缀后的前64位十六进制字符代表您的作者ID,最后64位十六进制字符是您的VRF会话密钥的公钥。在下一部分映射您的作者ID和设置会话密钥时,您将使用串联的公钥。

Collator Terminal Logs RPC Rotate Keys

确保您已记下串联的会话密钥公钥。您的每台服务器,包括主服务器和备份服务器,都应该拥有其独特的密钥。由于密钥永远不会离开您的服务器,因此您可以将其视为该服务器的唯一ID。

接下来,您将需要注册您的会话密钥并将author ID会话密钥映射到H160以太坊格式的地址(用于接收区块奖励)。

Remix设置

首先,获取AuthorMappingInterface.sol的副本并执行以下操作:

  1. 点击File explorer标签
  2. 将文件内容复制并粘贴至命名为AuthorMappingInterface.solRemix文件

Copying and Pasting the Author Mapping Interface into Remix

编译合约

  1. 点击Compile标签(从上至下第二个)
  2. 编译接口,点击Compile AuthorMappingInterface.sol

Compiling AuthorMappingInterface.sol

访问合约

  1. 点击Remix中Compile正下方的Deploy and Run标签。请注意,您不是在此处部署合约,而是访问已经部署的预编译合约
  2. 确保在ENVIRONMENT下拉菜单中选择Injected Provider - Metamask
  3. 确保在CONTRACT下拉菜单中选择AuthorMappingInterface.sol。因为这是一个预编译合约,因此无需部署,相反,您需要在At Address字段中提供预编译的地址
  4. 提供Moonbase Alpha的作者映射预编译地址:0x0000000000000000000000000000000000000807并点击At Address

Provide the address

作者映射预编译将出现在Deployed Contracts列表中。

映射会话密钥

接下来是将您的会话密钥映射到您的H160账户(以太坊格式的地址)。确保您持有此账户的私钥,此账户将用于支付区块奖励。

要将您的会话密钥映射到您的账户,您需要先加入候选人池。当您成为候选人后,您需要发送一个映射extrinsic。请注意,每个作者ID注册时将绑定一笔保证金。

在开始之前,确保您已连接至您想要映射会话密钥的账户。此账户将用于接收区块奖励。

  1. 展开AUTHORMAPPING合约
  2. 展开setKeys方法
  3. 输入您的会话密钥
  4. 点击transact
  5. 点击Confirm确认跳出的MetaMask交易

Map your session keys

要验证您的会话密钥是否映射成功,您可以使用mappingWithDeposit方法或作者映射palletnimbusLookup方法。详情您可以参考收集人账户管理教程的查看映射部分