比特币上的可验证延迟函数

可验证延迟函数 (VDF) 是一种需要大量 顺序计算 来评估但可以快速验证的函数。我们首次在比特币上实现了它。VDF 作为密码学技术可用于构建大量新应用程序,例如公共随机信标、计算时间戳和数据复制证明。

VDF

场景

链上随机信标

在区块链中很难实现随机性,因为一切都是确定性和公开的。一个经典的例子是两方之间的投注智能合约,如果下一个区块哈希是偶数,则一方获胜,如果是奇数,则另一方获胜。矿工可以通过玩这个合约来作弊,同时忽略任何让他输掉赌注的新区块。

VDF 通过要求随机性不是来自块本身,而是来自它的 VDF 来缓解这个问题。通过将 VDF 调整为需要很长时间来计算,比如 1 小时,矿工就不会因为在下一小时找到的区块中放弃挖矿奖励而作弊,因为它大于赌注金额。

彩票

在一个类似的例子中,爱丽丝、鲍勃和查理想玩一轮彩票,这需要他们共同生成一个随机数来决定赢家。在一种简单的方法中,他们每个人都发布一个随机数。一旦所有参与者都这样做了,他们就会计算已发布数字总和的哈希值。

问题是最后一个提交他的号码可以控制结果。例如,如果 Alice 和 Bob 已经提交了他们的值,Charlie 可以尝试使用不同的数字来计算结果,直到他找到一个产生他希望的结果的数字。为了克服这个问题,我们使用 VDF 引入了延迟。假设参与者必须在 12:0012:10 之间提交他们的号码。在所有数字都提交后(或截止日期已过),它们再次被散列,并在生成的散列上评估 VDF,这需要比 10 分钟更长的时间来评估,比如说 1 小时。现在查理无法作弊,因为评估结果的时间比提交窗口长。

正式定义

有效的 VDF 函数 f(x) 必须具有以下属性:

顺序的: 任何人都可以在 t 个连续步骤中计算 f(x)。请注意,计算不能并行化是必要的。这确保了攻击者不能仅仅通过利用更多资源来显着加快计算速度。计算时间仅受单个执行线程的速度限制。
可高效验证: 给定输出 y,任何观察者都可以在短时间内验证 y = f(x),特别是 log(t)

VDF 是一种可证明减慢速度的方法。他们在输出中引入强制时间延迟,以便恶意行为者无法通过预测未来值来影响它。

VDF 与工作量证明

VDF 和 PoW 都难以计算,但易于验证。根本区别在于 PoW 可以并行化,而 VDF 不能。

实现

由于 VDF 是可有效验证的,我们可以在智能合约中验证它。我们已经为 Wesolowski 开发的流行 VDF 实现了一个验证器。

VDF 可以表示为以下函数:

y = [x^(2^T)] mod N

x 是输入值,T 是公知的延迟参数,决定了延迟的持续时间,y 是输出。

要计算 x^ 2 ^ T,我们必须按顺序计算 x^ 2 ^ i,其中 i0T。至关重要的是,重复的平方计算不可并行化。

为了使其有效地可验证,以便验证者不需要再次遵循完整的 T 步骤,运行以下交互协议。可以使用 Fiat–Shamir 启发式使该协议成为非交互式的。

Verifier: Generates random L and sends to prover.Prover:Computes: (q, r) = (2^T)/LThen: pi = x ^ qSend to prover (y, pi)Verifier: Computes: r = (2^T) mod LCheck: y = pi^L * x^r

验证器在下面实现。

library VDFVerifierWeslowski {  static function verify(int g, int pi, int y, int q, int nonce, int delay) : bool {bool ret = true;ret = ret && nonce <= MAX_NONCE;ret = ret && g != 0 && g < RSA_MODULUS;ret = ret && pi != 0 && pi < RSA_MODULUS;ret = ret && y != 0 && y < RSA_MODULUS;ret = ret && q < RSA_MODULUS;int l = hashToPrime(g, y, nonce);ret = ret && millerRabinPrimalityTest(l);int r = modReduce(1 << delay, MAX_NONCE);int u1 = modexp(pi, l, RSA_MODULUS);int u2 = modexp(g, r, RSA_MODULUS);return ret && (mulmod(u1, u2, RSA_MODULUS) == y);}...}

完整的代码和测试可以在 GitHub 上找到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/139962.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

李航老师《统计学习方法》第2章阅读笔记

感知机&#xff08;perceptron&#xff09;时二类分类的线性分类模型&#xff0c;其输入为实例的特征向量&#xff0c;输出为实例的类别&#xff0c;取1和-1二值。感知机对应于输入空间&#xff08;特征空间&#xff09;中将实例划分为正负两类的分离超平面 想象一下在一个平面…

人工智能机器学习-飞桨神经网络与深度学习

飞桨神经网络与深度学习-机器学习 目录 飞桨神经网络与深度学习-机器学习 1.机器学习概述 2.机器学习实践五要素 2.1.数据 2.2.模型 2.3.学习准则 2.4.优化算法 2.5.评估标准 3.实现简单的线性回归模型 3.1.数据集构建 3.2.模型构建 3.3.损失函数 3.4.模型优化 3…

怎么实现一个登录时需要输入验证码的功能

今天给项目换了一个登录页面&#xff0c;而这个登录页面设计了验证码&#xff0c;于是想着把这个验证码功能实现一下吧。 这篇文章就如何实现登录时的验证码的验证功能结合代码进行详细地介绍&#xff0c;以及介绍功能实现的思路。 目录 页面效果 实现思路 前端页面代码 lo…

conda常用指令

常用conda指令 查看当前有哪些环境&#xff0c;有base环境 conda env list 创建环境 # conda create -n 你的环境名 python版本号 # 创建python3.10&#xff0c;名为env虚拟环境 conda create -n env python3.10 激活环境 conda activate env

SpringCloud Alibaba - Sentinel篇

一、Sentinel快速入门 Sentinel官网地址&#xff1a;https://sentinelguard.io/zh-cn/index.html Sentinel项目地址&#xff1a;https://github.com/alibaba/Sentinel Sentinel是阿里巴巴开源的一款微服务流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量限流、熔…

Linux MyFile

在之前&#xff0c;我们应该都多少接触过了C语言的文件管理&#xff0c;fopen&#xff0c;fclose&#xff0c;fputs....等函数的用法&#xff0c;也分析了系统层面上C语言是如何实现文件管理的。 回顾 上一个文章&#xff0c;我们讲解了十分重要的知识&#xff0c;在文件被打…

成集云 | 用友NC集成聚水潭ERP(用友NC主管供应链)| 解决方案

源系统成集云目标系统 方案介绍 用友NC是用友NC产品的全新系列&#xff0c;是面向集团企业的世界级高端管理软件。它以“全球化集团管控、行业化解决方案、全程化电子商务、平台化应用集成”的管理业务理念而设计&#xff0c;采用J2EE架构和先进开放的集团级开发平台…

平板用的触控笔什么牌子好?性价比高的触控笔推荐

随着平板电脑的普及&#xff0c;越来越多用户为了方便都选择了电容笔&#xff0c;电容笔已经完全代替了我们的手指&#xff0c;并且使我们的书写速度得到了极大的提升。然而&#xff0c;因为其的独特的重力压感功能与芯片技术&#xff0c;导致了原装笔的售价一直居高不下&#…

JavaScript - canvas - 放大镜

效果 示例 项目结构&#xff1a; 源码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>放大镜</title><style type"text/css">div {width: 200px;height: 200px;display: inline-bl…

2023-09-20 Android CheckBox 让文字显示在选择框的左边

一、CheckBox 让文字在选择框的左边 &#xff0c;在布局文件里面添加下面一行就可以。 android:layoutDirection"rtl" 即可实现 android:paddingStart"10dp" 设置框文间的间距 二、使用的是left to right <attr name"layoutDirection">&…

RGB格式

Qt视频播放器实现&#xff08;目录&#xff09; RGB的使用场景 目前&#xff0c;数字信号源&#xff08;直播现场的数字相机采集的原始画面&#xff09;和显示设备&#xff08;手机屏幕、笔记本屏幕、个人电脑显示器屏幕&#xff09;使用的基本上都是RGB格式。 三原色 RGB是…

网络协议层次模型

OSI 七层模型 在 OSI 网络分层模型中&#xff0c;每个分层都接收由它下一层所提供的特定服务&#xff0c;并且负责为自己的上一层提供特定的服务。上下层之间进行交互时所遵循的约定叫做接口 &#xff1b;同一层之间的交互所遵循的约定叫做协议&#xff0c; 下图是 OSI 七层…

2023华为杯研究生数学建模竞赛CDEF题思路+模型代码

全程更新华为杯研赛CDEF题思路模型及代码&#xff0c;大家查看文末名片获取 华为杯C题思路分析 问题一 在每个评审阶段&#xff0c;作品通常都是随机分发的&#xff0c;每份作品需要多位评委独立评审。为了增加不同评审专家所给成绩之间的可比性&#xff0c;不同专家评审的作…

SpringBoot轻松实现项目集成Knife4j接口文档

Knife4j 介绍 Knife4j 官网 Knife4j是一款基于Swagger生成API文档的增强工具&#xff0c;它简化了开发者构建和管理RESTful API文档的过程。通过自动扫描项目中的接口信息&#xff0c;Knife4j能够生成详细、易读的API文档&#xff0c;无需手动编写和维护。它提供交互式的接口调…

CSP-J/S 2023第一轮认证晋级分数线有些爆冷,超出想象

昨天广东、江西、内蒙古、河北、江苏、吉林、四川相继公布了第一轮认证成绩和晋级分数线。 爆冷 说实在话&#xff0c;看到这个分数线&#xff0c;我有些意外。 省份 CSP-J CSP-S 江西 55 29 内蒙古 30 20 河北 48 20 江苏 72.5 52.5 吉林 52 33 四川 67 55 就拿我们大河北来…

02强化学习基本概念

强化学习基本概念 前言1、State、Action、Policy等① State② Action③ State transition④ State transition probability⑤ Polity 2、Reward、Return、MDP等① Reward② Trajectory and return③ Discounted return④ Episode⑤ MDP 总结&#xff1a; 前言 本文来自西湖大学…

一、荔枝派nano启动USB虚拟串口功能FLASH版

一、搭建环境 本次使用的是ubuntu16.04进行搭建编译环境&#xff0c;具体的配置编译登都在荔枝派官网有介绍&#xff1a;https://wiki.sipeed.com/soft/Lichee/zh/Nano-Doc-Backup/build_sys/build_flash_copy.html 特别注意&#xff1a;本次需要使用的USB转串口功能&#xff0…

解决方案 | 如何构建市政综合管廊安全运行监测系统?

如何构建市政综合管廊安全运行监测系统&#xff1f;WITBEE万宾城市生命线智能监测仪器&#xff0c;5年免维护设计&#xff0c;集成10多项结构与气体健康监测指标&#xff0c;毫秒级快速响应&#xff0c;时刻感知综合管廊运行态势

【kafka】可视化工具KAFKA EAGLE安装分享

目录 准备&#xff1a; 开始&#xff1a; 1.解压 2.环境变量配置 3.生效环境变量配置文件 3.修改配置文件 1.修改zookeeper集群信息 2.修改mysql配置信息 4.启动 5.异常排查 6.页面 创作不易&#xff0c;你的动力是我创作的动力&#xff0c;如果有帮助请关注我&…

C 初级学习笔记(基础)

目录 1.预处理器指令 预定义宏 预处理器运算符 &#xff08;\&#xff09; 参数化的宏 头文件 .h 引用头文件操作 2.函数&#xff08;标识符&关键字&运算符&#xff09;存储类 函数参数 a. 标识符&关键字 b. 运算符&#xff08;算术、关系、逻辑、位、赋…