blockchain - 如何为未签名的交易实现递增随机数?
问题描述
我的托盘中运行了一个链下工作实例,该实例在时代选举结束后调用了一个未签名的外部实例。这个未签名的外部数据的目的是将一些数据存储在链下索引存储中,以供下一个时代的所有验证者使用。如果有超过 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()
};
所以问题是如何管理随机数,以便它不会给我关于事务优先级的错误?如果有这种实现的示例,那将非常有帮助。
解决方案
未签名的交易不与任何帐户相关联,因此它们也没有任何随机数。
推荐阅读
- python - 如何解决 IndexError:数组的索引过多
- c# - 使用 Microsoft Graph 进行 Exchange 集成(本地)C# 示例
- swagger - Swagger 中的关联数组 (OpenApi 3.0.0)
- ios - 在 Firebase 中存储切换按钮状态
- php - 如何使用 PHP 为具有相同分数的用户分配相同的排名?
- javascript - 在vue js中更改浏览器返回事件
- excel - 打开文件 Workbooks.Open(Filepath) 时出现错误 91
- java-8 - 如果一个列表的元素以另一个列表的元素开头,则返回 true 或 false
- tensorflow - TensorFlow 2:StringLookUp 或 categorical_column_with_vocabulary_list
- awk - 使用一组特定列的 awk 或 sed 更改字段分隔符