预言机简介

区块链预言机是智能合约获取外部数据的关键,它允许封闭的区块链网络获取如币价、天气等实时信息。预言机通过直接读取、发布订阅和请求响应等方式获取数据,并面临数据可靠性的挑战。中心化预言机依赖可信机构,而去中心化预言机则试图通过群体智慧确保数据准确性。

1. 为什么需要预言机

区块链是一个完全封闭的环境,在智能合约执行的过程中,不能引入不确定性,也就是说不能出现网络访问,因为网络访问是不确定的。

如果智能合约的执行结果不是确定的,那么就有可能造成节点之间数据的不同步。但是随着智能合约不断的发展,链需要从真实的实际去获取信息。

这些信息有可能是币价信息、股价信息、天气、真正的随机数等等。而智能合约获取这些数据的时候,需要通过确定性的方法,对于每一次数据的获取,所有节点获取到的数据是一致的。

为了达到这个目的,就需要预言机(oracle),这里的预言机不会预测任何事情,只是会将现实世界的数据传输到链上,供链上的智能合约使用。

2. 预言机的几种实现方法

预言机的实现原理其实都类似,一般来说会包含三个步骤:

  • 从链外的数据源搜集数据
  • 将数据签名传输到区块链网络中
  • 智能合约获取数据,在合约中使用

因为智能合约本身是无法访问网络的,只能让预言机通过本地读取的方式来获取数据。而预言机服务本身有一部分也是区块链网络中的智能合约,这些智能合约会与链外的预言机网络进行交互。

预言机提供的数据获取方法大体上可以分成三类:

2.1 直接读取

这种方式通常用来获取那些不会改变的数据,比如某个人的生日、学历证明、出生地等等信息,这些信息确定后应该就不会再改变了。这类的数据通常只需要写到链上一次,然后就可以供其他的合约使用了。这些数据通常不会直接写到链上,而是会通过加盐再进行 hash 运算,最后只存储一个 hash 值。

这样做的原因有两个,一方面,可以减少数据的存储量,另外,出于隐私的保护,毕竟一些数据上链之后,就会永久存在了。

这样的好处在于,不需要合约之间进行频繁的交互,既节约时间,也节省成本。但只有一些特定的数据能够采用这种方式。

2.2 发布与订阅

很多数据并不一成不变的,比如天气信息、股票信息、币价信息,都在不断的变化,因此预言机网络需要不断的到链上来更新数据,每一类数据都可以看做是一个主体。而对某些数据感兴趣的智能合约则会订阅这些主题,在需要这些数据的时候来取。

还有一些合约可能会去监控这些数据的变化,那就需要不断的来轮询订阅的数据主题,这样可能会有比较高的成本(数据的轮询也是在运行代码,智能合约只要运行,就会产生成本)。

2.3 请求与响应

这也是获取数据最复杂的一种方式,这种方式用于获取一个独一无二的数据,或者数据量太大,无法全部写到链上。

比如常见的获取随机数。在智能合约中获取不到真正的随机数,需要从链外去获取。

这种模式中,预言机会接收其他合约的数据查询请求,然后预言机网络监听区块链网络相关的交易,如果发现数据请求,就会检查请求,比如是否已经付款。确认无误之后,就会将数据回调给请求数据的智能合约。

3. 预言机的挑战

预言机的最大挑战在于,怎么确保预言机提供的数据是可靠的。

从这个角度上来说,预言机可以分为两类,一类是中心化的预言机。我们通常会假设这个预言机不会造假,比如某个政府部门、大学等等。中心化的预言机会从两个方面来保证数据的可靠性。一方面通过签名来保证数据没有被篡改。另外一方面会提供一个可信的执行环境。

但是这样并不足以解决全部的问题,因为这些数据都需要信赖一些机构,没有办法保证这些机构不会造假,而且中心化的预言机容易出现故障,一旦出现故障,对链上的交易会产生很大的影响。

4. 总结

区块链外信息写入区块链内的机制,一般被称为预言机(oracle mechanism)。

目前讨论得比较多的预言机有两类。一是依赖某一中心化信息源(比如彭博、路透),但这与区块链的去中心化宗旨背道而驰。二是将区块链外信息离散化后用经济激励和投票写入区块链。这类机制依靠群体智慧,根据投票结果对奖惩投票人,投票越接近全体投票的平均值、中位数或其他样本统计量的投票人越有可能得到奖励,反之就越有可能被惩罚,以此来激励投票人认真投票。隐含假设是,参与投票的群体在投票时不存在系统性偏差。但这一假设在现实中不一定成立,因此至今没有普遍适用的去中心化预言机方案。

### 随机预言机的概念及其在密码学中的应用 #### 定义与基本概念 随机预言机(Random Oracle, RO)是一个理想化的哈希函数模型,在该模型下,任何输入都会被映射到一个完全随机的输出[^1]。这意味着每次调用随机预言机时,如果某个特定输入尚未被查询,则返回一个新的独立均匀分布的随机值;而一旦某次查询得到了对应的输出,那么后续对该相同输入的所有查询都将返回相同的值。 这种特性使得随机预言机成为一种强大的工具用于简化复杂的安全性证明过程。它允许研究者在一个假设的理想环境中验证协议的有效性和安全性,而不必考虑实际使用的哈希函数可能存在的弱点或偏差[^2]。 #### 实现方式 尽管真正的随机预言机无法物理实现,但在理论分析中可以通过假定其存在来构建各种加密算法和协议的安全性论证框架——即所谓的“随机预言机模型”(ROM)[^1]。实际上部署这些基于ROM设计出来的系统时,通常会选用标准的密码散列函数作为替代品,比如SHA系列等。然而需要注意的是,这种方法可能会引入额外的风险因素,因为现实世界里的哈希函数并不具备完美的随机性质。 另外值得注意的一点是在某些特殊场景下,例如涉及量子计算威胁的情形里,还需要进一步探讨更加强健的设计思路—这便是所谓“量子随机预言机模型(QROM)”的研究方向所在。 #### 密码学中的典型应用场景 - **签名方案**: BLS (Boneh-Lynn-Shacham) 数字签名就是一个典型的例子,其中利用了随机预言机来进行安全性的形式化证明。在此过程中,H(m)=g^(xb)+y这样的表达式可以用来模拟针对消息m 的哈希查询响应行为; 同时也体现了随机预言机能提供的一种称为"陷阱门"(Trapdoor)的功能,这对于完成整个归约构造至关重要[^2]。 - **密钥交换协议**: Diffie-Hellman 类型的密钥协商机制经常依赖于某种形式的绑定操作以防止中间人攻击等问题发生。通过引入随机预言机可以帮助增强此类交互模式下的功能性保障措施。 - **零知识证明**: 许多高效的zk-SNARKs 或其他类型的简洁零知证据体系都隐含着对随机预言机的应用需求,以便能够在保持隐私的同时确保证明者的声明可信度。 ```python def random_oracle(input_data): import hashlib sha_hash = hashlib.sha256() sha_hash.update(input_data.encode('utf-8')) return sha_hash.hexdigest() message = "test message" output = random_oracle(message) print(f"The 'random oracle' output for '{message}' is {output}") ``` 此代码片段展示了一个简单的Python程序如何模仿随机预言机的行为特征。当然这只是为了演示目的,并不代表真实的随机预言机功能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值