EndBlock
在每个区块结束时,将对模块的状态执行以下操作:
1. 处罚
验证者处罚
当验证者未能对通过 SignedValsetsWindow
的验证者集合更新(valset update)进行签名时,将受到惩罚。换句话说,如果验证者未能在预配置的时间内为验证者集合更新提供确认,他们将因其抵押的 SlashFractionValset
部分被罚没,并立即被监禁(jailed)。
批量处罚
当验证者未能对通过 SignedBatchesWindow
的交易批次(batch)进行签名时,将受到惩罚。换句话说,如果验证者未能在预配置的时间内为交易批次提供确认,他们将因其抵押的 SlashFractionBatch
部分被罚没,并立即被监禁(jailed)。
2. 取消超时的交易批次
任何仍在 Outgoing Batch 池中且其 BatchTimeout
(指定的以太坊区块高度,交易批次应在此高度之前执行)已超时的交易批次将被从池中移除,相关的提款请求将重新插入到 Outgoing Tx 池中。
3. 创建新的验证者集合更新
在以下情况下,将自动创建新的验证者集合更新(Validator Set update):
验证者权力变化超过 5%:当最新验证者集合与当前验证者集合之间的权力差异(power diff)超过 5% 时。
验证者开始解绑:当某个验证者开始解绑(unbonding)时。
新的验证者集合最终将被中继(relayed)至以太坊上的 Peggy 合约。
4. 修剪旧验证者集
已通过 SignedValsetsWindow
的先前观察到的验证者集合(valsets)将从状态中移除。
5. 证明处理
处理当前正在投票的所有证明(attestations)(针对特定事件的声明集合)。每个证明依次处理,以确保每个 Peggy 合约事件都被处理。在处理完每个证明后,模块的 lastObservedEventNonce
和 lastObservedEthereumBlockHeight
将被更新。
根据证明中的声明类型,执行以下操作:
MsgDepositClaim:为接收者地址铸造/解锁存入的代币。
MsgWithdrawClaim:从 Outgoing 池中移除相应的交易批次,并取消任何先前的批次。
MsgValsetUpdatedClaim:更新模块的
LastObservedValset
。MsgERC20DeployedClaim:验证新的代币元数据并将其注册到模块的状态中(denom <-> token_contract)。
6. 清理已处理的证明
之前处理过的证明(高度早于 lastObservedEthereumBlockHeight
)会从模块状态中移除。
Last updated