Skip to content

历史更新

Historical Updates Banner

概览

此页面提供一个关于Moonbeam和Moonriver上的历史更新概览,例如Moonbeam源代码的漏洞修复记录和应用的数据迁移。

此页面旨在提供与需要执行数据迁移更新有关的意外行为和数据不一致的信息。

漏洞修复

无效交易存储

对于无法支付交易成本的无效交易,EVM pallet会将交易元数据插入存储系统而非丢弃它,因为没有交易成本的验证。因此,runtime存储系统因无效交易数据而变得不必要的膨胀。

此漏洞仅影响Moonriver和Moonbase Alpha并存在于以下Runtime和区块区间:

网络 出现时间 修复时间 影响的区块区间
Moonriver RT49 RT600 0 - 455106
Moonbase Alpha RT40 RT600 0 - 675175

关于更多信息,您可以查看GitHub上的相关Frontier PR


以太坊费用未发送至财政库

Moonbeam上的交易费用模型有20%的费用进入链上财政库,80%作为通缩力量销毁。在runtime 800之前,以太坊交易不会导致20%的交易费用进入链上财政库。

此漏洞仅影响Moonriver和Moonbase Alpha并存在于以下Runtime和区块区间:

网络 出现时间 修复时间 影响的区块区间
Moonriver RT49 RT800 0 - 684728
Moonbase Alpha RT40 RT800 0 - 915684

关于更多信息,您可以查看GitHub上的相关PR.


遗失返还资金

Moonbeam配置为将保留账户最低存款(Existential Deposit)设置为0,代表所有账户不需要最低余额数量即可被视为活跃。对于具有此配置的基于Substrate的链而言,由于零余额帐户被视为不存在,因此遗漏对该帐户的退款。

此漏洞存在于以下Runtime和区块区间:

网络 出现时间 修复时间 影响的区块区间
Moonbeam RT900 RT1001 0 - 5164
Moonriver RT49 RT1001 0 - 1052241
Moonbase Alpha RT40 RT1001 0 - 1285915

关于更多信息,您可以在Github上查看相关Frontier PR以及有关的Substrate PR


错误收集人选择

当通过delegatorBondMore extrinsic增加委托时,收集人候选人的总委托并未正确更新。这导致增加的委托金额未包含在候选人的总金额中,而该金额是用于确定哪些候选人会在活跃的收集人集中。因此,即使一些候选人实际上应该进入活动集中,但他们因此问题而没有被选中进入活跃收集人集中,从而影响他们自己和他们的委托人的奖励。

此漏洞存在于以下Runtime和区块区间:

网络 出现时间 修复时间 影响的区块区间
Moonbeam RT900 RT1300 0 - 524762
Moonriver RT49 RT1300 0 - 1541735
Moonbase Alpha RT40 RT1300 0 - 1761128

关于更多信息,您可以在GitHub上查看相关PR


新账户事件漏洞

创建新帐户时会发出System.NewAccount事件。但是,存在一个漏洞,即某些帐户在创建时未发出此事件。已应用一个修补程序来修补受影响的帐户并在稍后发出System.NewAccount

该修补程序已应用于以下区块区间:

网络 区块区间
Moonbeam 1041355 - 1041358 和 1100752
Moonriver 1835760 - 1835769
Moonbase Alpha 2097782 - 2097974

此漏洞存在于以下Runtime和区块区间:

网络 出现时间 修复时间 影响的区块区间
Moonbeam RT900 RT1401 0 - 915320
Moonriver RT49 RT1401 0 - 1705939
Moonbase Alpha RT40 RT1400 0 - 1962557

关于更多信息,您可以在GitHub上查看相关的Frontier PR.


错误时间戳单位

EIP-2612和以太坊区块以秒为单位处理时间戳,然而Moonbeam采用的Substrate时间戳使用毫秒。此漏洞仅影响EIP-2612的实现,而非block.timestamp数值。

此漏洞存在于以下Runtime和区块区间:

网络 出现时间 修复时间 影响的区块区间
Moonbeam RT900 RT1606 0 - 1326697
Moonriver RT49 RT1605 0 - 2077598
Moonbase Alpha RT40 RT1603 0 - 2285346

关于更多信息,您可以在GitHub上查看相关PR


错误委托奖励计算

每当有待处理请求时,所有委托和收集人的奖励支出都被低估了。委托奖励是根据每个委托人绑定的Token数量相对于给定收集人的总占比计算的。通过计算待处理请求的委托金额,收集人及其委托的奖励低于原本应有的水平。

此漏洞存在于以下Runtime和区块区间:

网络 出现时间 修复时间 影响的区块区间
Moonbeam RT1001 RT1802 5165 - 1919457
Moonriver RT1001 RT1801 1052242 - 2572555
Moonbase Alpha RT1001 RT1800 1285916 - 2748785

关于更多信息,您可以在GitHub上查看相关PR


区块母哈希错误计算

在EIP-1559推出后,其包含的新以太坊交易种类,让区块头的母哈希被错误计算为H256::default

此漏洞仅影响Moonbase Alpha并存在于以下Runtime和区块区间:

网络 出现时间 修复时间 影响的区块区间
Moonbase Alpha RT1200 RT1201 1648994 - 1679618

关于更多信息,您可以在GitHub上查看相关Frontier PR


EIP-1559汽油费的错误处理

随着EIP-1559支持的引入,处理maxFeePerGasmaxPriorityFeePerGas的逻辑被错误地实现了,导致maxPriorityFeePerGas被添加到baseFee中,即使总和超过了maxFeePerGas

此漏洞存在于以下Runtime和区块区间:

网络 出现时间 修复时间 影响的区块区间
Moonbeam RT1201 RT1401 415946 - 915320
Moonriver RT1201 RT1401 1471037 - 1705939
Moonbase Alpha RT1200 RT1400 1648994 - 1962557

关于更多信息,您可以查看相关Frontier PR.


支付给收集人的交易费用

对于包含优先费用的EIP-1559交易的区块,交易费用被错误地计算并分配给了区块的收集人。Moonbeam上用于交易和智能合约执行的费用模型经过设计,20%的费用将存入链上财政库,80%将作为通货紧缩力量而销毁。由于这个漏洞,受影响交易的交易费用没有按预期销毁。

此漏洞存在于以下Runtime和区块区间:

网络 出现时间 修复时间 影响的区块区间
Moonbeam RT1201 RT1504 415946 - 1117309
Moonriver RT1201 RT1504 1471037 - 1910639
Moonbase Alpha RT1200 RT1504 1648994 - 2221772

关于更多信息,您可以在GitHub上查看相关PR


错误状态根哈希

由于未考虑交易类型字节,因此对于非遗留交易的状态根哈希计算部分错误。在EIP-2930EIP-1559的支持下,引入的交易类型分别为0x01(1)和0x02(2)。这些交易类型在状态根哈希的计算中被忽略。

此漏洞存在于以下Runtime和区块区间:

网络 出现时间 修复时间 影响的区块区间
Moonbeam RT1201 RT1701 415946 - 1581456
Moonriver RT1201 RT1701 1471037 - 2281722
Moonbase Alpha RT1200 RT1700 1648994 - 2529735

关于更多信息,您可以在GitHub上查看相关Frontier PRMoonbeam PR


非交易调用的过高Gas限制

当进行非交易调用时,例如eth_calleth_estimateGas,在没有为过去的区块指定Gas限制的情况下进行时,客户端默认使用Gas限制乘数(10x),这会导致Gas限制验证失败。因为它是针对区块Gas限制的上限进行验证的。因此,如果给定调用的Gas限制大于区块Gas限制,则会返回Gas限制过高错误的结果。

此漏洞存在于以下Runtime和区块区间:

网络 出现时间 修复时间 影响的区块区间
Moonbeam RT1701 RT1802 1581457 - 1919457
Moonriver RT1701 RT1802 2281723 - 2616189
Moonbase Alpha RT1700 RT1802 2529736 - 2879402

关于更多信息,您可以在GitHub上查看相关Frontier PR


迁移

当更改或添加存储项并需要用数据填充时,迁移是必要的。下面列出的迁移部分是由受影响的pallet来分类的。

作者映射pallet

更新映射存储项

此迁移更新了作者映射pallet现已弃用的Mapping存储项,以使用更安全的哈希器类型。哈希器类型已更新为Blake2_128Concat而非Twox64Concat

此迁移仅适用于Moonriver和Moonbase Alpha,并在以下Runtime和区块执行:

网络 执行Runtime 应用区块
Moonriver RT800 684728
Moonbase Alpha RT800 915684

关于更多信息,您可以查看GitHub上的相关PR


添加VRF密钥支持

当推出VRF密钥支持时,作者映射pallet的MappingWithDeposit存储项已更新为包含keys字段以支持可通过Nimbus ID查找的VRF密钥。因此,此处应用迁移以使用此新字段更新现有存储项。

此迁移在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonbeam RT1502 1107285
Moonriver RT1502 1814458
Moonbase Alpha RT1502 2112058

关于更多信息,您可以查看GitHub上的相关PR


一个Nimbus ID对应一个账户ID

此处应用迁移以确保一个帐户ID只能有一个Nimbus ID。此迁移接受给定帐户拥有的第一个Nimbus ID,并清除与该帐户关联的任何其他Nimbus ID。对于任何已清除的相关内容,该相关内容的保证金将被退还。

此迁移在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonbeam RT1606 1326697
Moonriver RT1605 2077599
Moonbase Alpha RT1603 2285347

关于更多信息,您可以查看GitHub上的相关PR


基础费用Pallet

设置弹性存储项数值

此迁移部分将基础费用pallet的Elasticity存储项设置为0,从而使BaseFeePerGas保持不变。

此迁移在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonbeam RT1300 524762
Moonriver RT1300 1541735
Moonbase Alpha RT1300 1761128

关于更多信息,您可以查看GitHub上的相关PR


民主Pallet

原像存储转移至新的原像Pallet

此处应用迁移将存储在民主pallet中的原像移动到新的原像pallet。由于波卡的上游更改,需要在Moonbeam上进行此迁移。

Moonbeam中有一个原像受到影响,其从调度程序队列中被丢弃并且从未执行过:0x14262a42aa6ccb3cae0a169b939ca5b185bc317bb7c449ca1741a0600008d306。这个原像已被最初提交原像的账户 手动移除了。

此迁移在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonbeam RT2000 3310369
Moonriver RT2000 3202604
Moonbase Alpha RT2000 2673234

关于更多信息,您可以查看GitHub上的相关PR


平行链质押Pallet

更新收集人状态存储项

此处应用迁移将平行链质押pallet的Collator存储项更新为新的Collator2存储项。此变动更新了收集人状态以包括以下内容:

  • nominators集是所有提名人(委托人)帐户ID的列表,不包含各自的绑定余额
  • 一个新的top_nominators存储项,返回所有最高提名人的列表,这些提名人按绑定金额从大到小排序
  • 一个新的bottom_nominators存储项,返回所有底部提名人的列表,按绑定金额从最小到最大排序
  • total存储项已替换为total_countedtotal_backingtotal_counted返回最高提名和收集人自身绑定金额的总和,而total_backing返回所有提名人和收集人自身绑定金额的总和

此迁移仅适用于Moonriver和Moonbase Alpha,并在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonriver RT53 9696
Moonbase Alpha RT52 238827

关于更多信息,您可以查看GitHub上的相关PR


修补总质押数量

由于一个可能导致数量不正确的潜在漏洞,此处对平行链质押pallet中CollatorState存储项的total质押金额进行了迁移。

此迁移仅适用于Moonriver和Moonbase Alpha,并在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonriver RT53 9696
Moonbase Alpha RT52 238827

关于更多信息,您可以查看GitHub上的相关PR


支持延迟提名人(委托人)离开

用于处理候选人退出的退出队列已更新成包括对延迟提名人(委托人)退出和撤销的支持,这需要迁移以将ExitQueue平行链质押pallet存储项更新为ExitQueue2NominatorState存储项也被迁移到NominatorState2,以防止提名人在已经安排退出时执行更多提名。

此部分迁移仅适用于Moonriver和Moonbase Alpha,并在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonriver RT200 259002
Moonbase Alpha RT200 457614

关于更多信息,您可以查看GitHub上的相关PR


清除质押存储膨胀

此处应用迁移来清除超过两轮的平行链质押pallet的PointsAtStake存储项的质押存储膨胀。

此迁移在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonbeam RT1001 5165
Moonriver RT1001 1052242
Moonbase Alpha RT1001 1285916

关于更多信息,您可以查看GitHub上的相关PR


支持手动离开和DPoS术语

平行链质押pallet已更新成包括手动退出。如果候选人或委托人想要减少或撤销他们的绑定金额,或是离开候选人或委托人池,他们需要先安排一个请求,等待延迟期结束,然后手动执行请求。因此,此处应用迁移以使用手动退出API替换自动退出队列,包括ExitQueue2存储项。

此外,此处将提名权益证明(NPoS)更改为委托权益证明(DPoS)术语,这标志着从“提名”到“委托”的完整改变。这需要迁移以下平行链质押pallet存储项:

  • CollatorState2迁移至CandidateState
  • NominatorState2迁移至DelegatorState

此迁移在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonbeam RT1001 5165
Moonriver RT1001 1052242
Moonbase Alpha RT1001 1285916

关于更多信息,您可以查看GitHub上的相关PR


提高每位候选人的最高委托量

此处应用迁移以增加平行链质押pallet中每个候选人的最大委托数量。它将Moonbase Alpha和Moonriver上的委托从100增加到500,在Moonbeam上从100增加到1000。

此迁移在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonbeam RT1101 171061
Moonriver RT1101 1188000
Moonbase Alpha RT1100 1426319

关于更多信息,您可以查看GitHub上的相关PR


将委托人提名分为前段和后段

此迁移将平行链质押pallet中已弃用的CandidateState存储项拆分为以下三个新的存储项,以避免不必要的存储读取:

  • CandidateInfo
  • TopDelegations
  • BottomDelegations

此迁移在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonbeam RT1201 415946
Moonriver RT1201 1471037
Moonbase Alpha RT1200 1648994

关于更多信息,您可以查看GitHub上的相关PR


修补错误的总委托量

此处应用迁移来修复错误收集人选择漏洞并修补所有候选人的授权总数。

此迁移在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonbeam RT1300 524762
Moonriver RT1300 1541735
Moonbase Alpha RT1300 1761128

关于更多信息,您可以查看GitHub上的相关PR


将委托人状态拆分为委托计划要求

此处应用迁移将待处理委托人请求从平行链质押pallet的DelegatorState存储项移动到一个新的DelegationScheduledRequests存储项中。

此迁移在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonbeam RT1502 1107285
Moonriver RT1502 1814458
Moonbase Alpha RT1502 2112058

关于更多信息,您可以查看GitHub上的相关PR


将质押储备替换为锁定余额

此处应用迁移将用户的预留余额更改为锁定余额。锁定余额与民主锁定资金是同一种类型资金,使用户可以使用他们的质押资金参与民主活动。

此迁移在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonbeam RT1701 1581457
Moonriver RT1701 2281723
Moonbase Alpha RT1700 2529736

关于更多信息,您可以查看GitHub上的相关PR


支持自动复利

为支持自动复利,此处对平行链质押pallet中的AtStake存储项应用了两个迁移:

  • RemovePaidRoundsFromAtStake - 移除与已支付轮次相关的任何陈旧的AtStake条目,这些轮次有候选人没有产生任何区块。此迁移是MigrateAtStakeAutoCompound迁移的先决条件
  • MigrateAtStakeAutoCompound - 迁移AtStake条目的未付费轮次的快照

此迁移在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonbeam RT1901 2317683
Moonriver RT1901 2911863
Moonbase Alpha RT1900 3069635

关于更多信息,您可以查看GitHub上的相关PR


更新交易信息存储项

此处于XCM-transactor pallet的TransactInfo存储项进行迁移,更改了以下内容:

  • 添加max_weight以防止交易者在目标链中拖延队列
  • 删除fee_per_bytemetadata_sizebase_weight,因为XCM交易不需要这些内容
  • fee_per_second替换了fee_per_weight以更好地反映fee_per_weight单位低于1的情况(如Kusama)

此迁移在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonbeam RT1201 415946
Moonriver RT1201 1471037
Moonbase Alpha RT1200 1648994

关于更多信息,您可以查看GitHub上的相关PR


添加对Statemine前缀重大更改的支持

以下三个迁移已添加到资产管理器pallet,以避免Statemine对其表示资产的方式的重大更改和在未来重大变化可能出现的问题:

  • UnitsWithAssetType - 将AssetTypeUnitsPerSecond存储项更新为AssetTypeunits_per_second的映射,而不是映射AssetIdunits_per_second。这样做是为了避免在出现重大更改时需要进行额外的迁移
  • PopulateAssetTypeIdStorage - 创建一个新的AssetTypeId存储项,其中包含AssetTypeAssetId的映射,这允许assetIdsAssetTypes的分开
  • ChangeStateminePrefixes - 将已注册的Statemine资产更新为新的形式

此迁移在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonbeam RT1201 415946
Moonriver RT1201 1471037
Moonbase Alpha RT1200 1648994

关于更多信息,您可以查看GitHub上的相关PR


添加支持费用支付资产存储项

通过从AssetTypeUnitsPerSecond存储项中读取支持的资产数据,将迁移应用于资产管理器pallet,该pallet创建了新的SupportedFeePaymentAssets存储项。该存储项将持有我们接受的用于XCM费用支付的所有资产。将在收到传入的XCM消息时读取它,如果资产不在存储列表中,则该消息将不会被处理。

此迁移在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonbeam RT1300 524762
Moonriver RT1300 1541735
Moonbase Alpha RT1300 1761128

关于更多信息,您可以查看GitHub上的相关PR


Nimbus作者筛选Pallet

替换可用比率为可用计数

此处对Nimbus库应用了一项重大更改,该存储库弃用了EligibleRatio以支持EligibleCount配置。因此,迁移被应用到Moonbeam库,如果EligibleRatio值存在,该存储库将填充新的EligibleCount值作为在该区块高度上定义的潜在作者的百分比。否则,该值被设置为默认值50

此迁移在以下Runtime和区块中执行:

网络 执行Runtime 应用区块
Moonbeam RT1502 1107285
Moonriver RT1502 1814458
Moonbase Alpha RT1502 2112058

关于更多信息,您可以查看Github上的相关Nimbus PRMoonbeam PR

Last update: May 8, 2023
| Created: January 20, 2023