首页 > 解决方案 > 如何为未签名的交易实现递增随机数?

问题描述

我的托盘中运行了一个链下工作实例,该实例在时代选举结束后调用了一个未签名的外部实例。这个未签名的外部数据的目的是将一些数据存储在链下索引存储中,以供下一个时代的所有验证者使用。如果有超过 1 个验证器在同一个块中调用此无符号外部,我会收到以下错误:

2021-10-06 14:06:19.406   WARN ThreadId(26) txpool: (offchain call) Error submitting a transaction to the pool: Pool(TooLowPriority { old: 10100, new: 10100 })    
2021-10-06 14:06:19.406  ERROR ThreadId(26) pallet_participant: Failed in submit_participant    
2021-10-06 14:06:19.406  ERROR ThreadId(26) pallet_participant: offchain_worker error: OffchainUnsignedTxSignedPayloadError 

经过一番挖掘(在这里)我发现错误来自同一块中的两个无符号外在具有相同的随机数。就我而言,由于我的托盘正在开发中,因此我的外部重量设置如下:

#[weight = 10000]
pub fn submit_participant(_signature: T::Signature) -> DispatchResult {

我的验证未签名函数事务优先级设置如下:

fn validate_unsigned(_source: TransactionSource, call: &Self::Call) -> TransactionValidity {
    let valid_tx = |provide| {
        ValidTransaction::with_tag_prefix("pallet-participant")
            .priority(100)
            .and_provides([&provide])
            .longevity(3)
            .propagate(true)
            .build()
    };

所以问题是如何管理随机数,以便它不会给我关于事务优先级的错误?如果有这种实现的示例,那将非常有帮助。

标签: blockchainsubstratepolkadot

解决方案


未签名的交易不与任何帐户相关联,因此它们也没有任何随机数。


推荐阅读