EndBlock

在每个区块结束时,将对模块的状态执行以下操作:

1. 处罚

验证者处罚

当验证者未能对通过 SignedValsetsWindow 的验证者集合更新(valset update)进行签名时,将受到惩罚。换句话说,如果验证者未能在预配置的时间内为验证者集合更新提供确认,他们将因其抵押的 SlashFractionValset 部分被罚没,并立即被监禁(jailed)。

批量处罚

当验证者未能对通过 SignedBatchesWindow 的交易批次(batch)进行签名时,将受到惩罚。换句话说,如果验证者未能在预配置的时间内为交易批次提供确认,他们将因其抵押的 SlashFractionBatch 部分被罚没,并立即被监禁(jailed)。

2. 取消超时的交易批次

任何仍在 Outgoing Batch 池中且其 BatchTimeout(指定的以太坊区块高度,交易批次应在此高度之前执行)已超时的交易批次将被从池中移除,相关的提款请求将重新插入到 Outgoing Tx 池中。

3. 创建新的验证者集合更新

在以下情况下,将自动创建新的验证者集合更新(Validator Set update):

  1. 验证者权力变化超过 5%:当最新验证者集合与当前验证者集合之间的权力差异(power diff)超过 5% 时。

  2. 验证者开始解绑:当某个验证者开始解绑(unbonding)时。

新的验证者集合最终将被中继(relayed)至以太坊上的 Peggy 合约。

4. 修剪旧验证者集

已通过 SignedValsetsWindow 的先前观察到的验证者集合(valsets)将从状态中移除。

5. 证明处理

处理当前正在投票的所有证明(attestations)(针对特定事件的声明集合)。每个证明依次处理,以确保每个 Peggy 合约事件都被处理。在处理完每个证明后,模块的 lastObservedEventNoncelastObservedEthereumBlockHeight 将被更新。

根据证明中的声明类型,执行以下操作:

  • MsgDepositClaim:为接收者地址铸造/解锁存入的代币。

  • MsgWithdrawClaim:从 Outgoing 池中移除相应的交易批次,并取消任何先前的批次。

  • MsgValsetUpdatedClaim:更新模块的 LastObservedValset

  • MsgERC20DeployedClaim:验证新的代币元数据并将其注册到模块的状态中(denom <-> token_contract)。

6. 清理已处理的证明

之前处理过的证明(高度早于 lastObservedEthereumBlockHeight)会从模块状态中移除。

Last updated