Page 179 - 《软件学报》2026年第6期
P. 179

2498                                                       软件学报  2026  年第  37  卷第  6  期



                 if SBlockcont Xi?=N?
                 then SBlockPMN'=SBlockPMN
                    ∧ SBlockcont'=SBlockcont
                    ∧ fishmanPMN'=fishmanPMN⊕{(Xi?→SBlockPMN Xi?)}
                 else SBlockPMN'=SBlockPMN⊕{(Xi?→SBlockcont Xi?+PMi)}

                    ∧ SBlockcont'=SBlockcont⊕{(Xi?→SBlockcont Xi?+l)}
                    ∧ fishmanPMN'=fishmanPMN
                    (b) 消息轮询模式    (PollingMessage)
                    在  PollingMessage 模式中, 消息轮询流程如图     9  所示, 平行链  D  处理从平行链   S  发来的  Mi 时执行以下步骤.

                               平行链S                             将其加入到Parachain D     平行链D
                                                               的入口队列ingressQueue
                                                               中, 如果接收方消息计数器
                               入口队列                            DBlockcont达到N,  则生成   入口队列
                                        ② 发送Mi                 接收方总承诺DBlockPMN
                               出口队列       通道       Collator D                        出口队列
                                                                              T
                                                       ③ 在接收到Mi时
                               区块头                     (1) Mi是候选区块的第1个消息,则记
                                                                                     ④  丢弃与Mi同
                                                       录其到达时间arrivetime为T 0          一区块的消息,
                                                       (2)  Mi不是候选区块的第1个消息,则
                                        ①  中继链根据区块头中                                 并扣除相应的
                                        记录的waittime,挑选出  判断Mi的arrivetime与T 0 的差是否小   DOT
                               中继链      等待时间最长的平行链     于有效期ddl             Mi在ddl内       F
                                        (假设为Parachain S)
                                                    图 9 消息轮询流程图

                    ① 首先, 确认   Mi 的目标平行链为平行链        D, 并确保平行链     S  与平行链  D  之间已建立通道. 此外, Mi 为所有消
                 息中等待时间最长的消息, 即         maxwaittime Mi=1.
                    ② 判断候选区块      Mi.X  是否在  DBlockcont 的记录中. 如果  Mi.X  不在记录中, 即  Mi.X < dom DBlockcont, 平行
                 链  D  将此时该消息的到达时间        arrivetime?及块标识   Mi.X  更新到  T 0 映射中. 若  Mi.X  已在记录中, 则保持    T 0
                 不变.
                    ③ Collator D  接收到候选区块  Mi.X  的消息时, 如果消息    Mi 在有效期内, 即该消息的到达时间          arrivetime?与第
                 1  个消息到达时间之间的差值小于有效期            ddl, 它会将消息   Mi 放入平行链    D  的入口队列中等待打包. 如果消息超
                 出了有效期, 则丢弃与超时消息相同区块的所有消息                 (DeleteMessage Mi.X=1), 并扣除相应的  DOT  代币  (deductDot
                 (S, D)=1).
                    ④ 在处理消息时, 如果候选区块          Mi.X  的消息数量   DBlockcont 达到预期的总数    Mi.N, 则保持  DBlockPMN  和
                 DBlockcont 不变. 否则, 将消息的承诺值     MessagePM Mi 添加到  DBlockPMN  中, 并更新  DBlockcont 记录. 具体见代
                 码  18.
                 代码  18. PollingMessage.

                 states, states': Parachain↔ParachainState
                 S, D: Parachain
                 DBlockPMN, DBlockPMN': string→  N
                                          N
                 DBlockcont, DBlockcont': string→
                 ΞRelaychainState
                 Mi: Message
   174   175   176   177   178   179   180   181   182   183   184