智能合约是在区块链网络上运行的软件代码(如以太坊),根据特定事件执行操作或任务。假设我想进行一笔交易,在交易中,我提供收件人的地址以及我拥有和拥有网络资金的证明。如果一切顺利,网络将把资金“转移”给接收者。
& ^4 V9 S8 Z+ x F+ ?; z/ }# W" D) A1 \& P' | a0 F7 _1 ]+ P
如果我想创建一个需要外部数据的去中心化应用程序,比如当前的天气和温度,以太坊的价格,甚至棒球比赛的结果,我该怎么办?
) Q, q1 }; l) S$ m, p
) A/ z% U: a1 I- h8 D) ~一个智能合约,换句话说,区块链上的一段代码,是如何获得这些信息的?这就是区块链应用程序的预言机发挥作用的地方。
( t. e- H6 I. p: v! M: r" I3 n
# N( D6 g& y4 Q8 Y; C; U' E“预言机”字面意思是可靠的信息来源。因此,字典甚至可以被视为预言机。然而,我们想避免不可靠的信息,所以我们引入了冗余。但是,我们也考虑gas费用。3个外部数据源的gas成本是正常gas成本的3倍。因此,我们可以取平均值或中位数。6 c. D: d" L* `% N/ V* }
4 S& Z2 r: \4 ]- D" D1 g2 k3 Q9 c: b什么是预言机?4 f& p: g+ `: m6 x2 E4 o
( b& a* M+ o n* y9 s$ |5 k
预言机可以看作是一个在链上传输数据的链外平台。这也是一个连接区块链和其他系统的线下平台。预言机负责将数据从网络服务器转发到区块链。除了DEX,大多数去中心化应用程序都使用预言机。
4 Z& C0 }2 G( \4 w# G; m& E
# M, ^, m& t/ `' ]% V为了获得可靠的数据,避免单点故障或防止恶意预言机节点,我们有时会选择使用冗余。我们引入了更多的节点。例如,如果我们想为DeFi贷款提供抵押品,我们希望有多个来源的ETH价格,借款人将ETH作为抵押品进行存款。4 z- ], a- r8 d/ Q. Y9 G/ W0 K) M4 i
' v& A: B! b' c5 ]* ] 9 L9 A5 j% A) X5 D' ~
# }% {# _, F8 y, N A* E, L; `
预言机帮助中继链下数据
$ y+ K6 o0 k3 B) j5 `' y' d5 F/ V" G6 v$ r3 M
智能合约在区块链上不能简单地从任何数据源(如web服务器)中挑选信息,因为所有节点都需要能够独立验证运行智能合约的结果。当这种情况发生时,他们可能会得到不同的结果。
# R$ l3 z/ C& J: ^$ T3 K* ^# v
4 E0 g9 ~8 \7 j& y; h" F8 P8 @, W例如,不同交易所的比特币价格是不同的。即使你在不同的时间检查相同的来源,你也会得到不同的结果。我们如何知道哪个数字准确或者选择哪个数字?我们通常会选择多余的结果。
: T5 Y' q0 C3 q7 `+ E! `5 X) a. o2 B/ e
预言机,有哪些类型?
' C9 s: |+ Q. C+ u! Y; v3 r我们根据三个方面对预言机进行分类:信息来源、信息方向、信任程度。
: o7 ]: Q( `* m4 _
6 M( h k, Q, E( Q7 ]1 M+ p- a数据源可以是硬件,也可以是软件。硬件预言机直接从物理世界收集数据,将其转换为数字值,然后输入智能合约。包括条形码扫描仪和传感器,它们主动或被动地收集数据并将其传输到智能合约。# f: O, |: B) Y* Y% a6 F
8 ?2 W& `; K0 t- L# y- {+ B0 I软件预言机从在线资源获取信息并浏览其网站,从而为智能合约提供最新信息。对区块链来说,这些信息通常来自加密货币交易所。
, v( r; o) m: z4 o3 L$ A9 v, L: X
信息的方向可以是入站或出站。Inbound 预言机允许网络将信息从外部数据源发送到智能合约,而outbound 预言机允许智能合约将数据发送到外部数据源。
. U; P+ Z+ C( {9 I/ p$ M8 j. M5 {( Y' j- ]4 ~/ S6 k) T
作为一个单一实体,集中式预言机向智能合约提供来自外部来源的数据,并具有一组安全功能。但是,因为只有一个节点负责-类似于传统的金融系统单点故障-它变得不太安全,更容易被输入智能合约的恶意数据破坏和攻击。
5 V. u# Q# I1 Y, k8 a
! h7 ^* ^' }& F6 t( B另一方面,去中心化预言机依靠多个外部来源来提高提供给智能合约的数据的可靠性。去中心化预言机基于 Schelling 点博弈论博弈理论,在谢林点博弈理论中,所有参与者之间并不相互勾结,也不提供数据。在过滤掉任何不准确之处后,谢林游戏会确定共识数据点或对软件提出的修改是否有效和可接受。
3 i8 ^1 Z' N5 ]' m' Z+ d5 L+ | P$ T# ~ L7 B# w( q
相信预言机
/ N; w, O5 s4 t' `由于单点故障,我们需要信任预言机,这一直是一个令人担忧的问题。区块链的本质是消除信任中介的需要,消除单点故障。我们可以通过让多个独立预言机 s形成共识来消除这种担忧。
8 g2 G6 L7 `0 S5 G, c; I1 i
8 x( D, @* H5 S/ M1 | Q+ L, c( S5 ]( K这导致了预言机 services的创建,它可以从各种来源获得信息。这些资源包括谷歌和亚马逊等大公司,以及气象站等其他组织。这确保了结果比单一来源更可靠。
% t; z" h5 e" X* u4 d( K
" g- p$ D6 v& p0 BProvable是一个预言机服务,当开发人员需要咨询区块链以外的可靠数据源时,它可以提供帮助。它提供了数据真实性的加密保证。, o8 h9 b. ?! D3 ?
5 J0 l S0 n# h2 l我们应该使用预言机服务还是数据源?
y3 w. ^$ a/ x# E( c* D) c互联网上有很多数据源。因此,将单个应用程序直接集成到数据馈送中是一个挑战。这就是预言机服务的目的。他们从双方提取信息,这使得应用程序更容易获得所需的数据摘要。
4 {2 I& n2 U, f' c6 @; |9 P5 E# G, _ T3 U
使用预言机 DeFi协议# L! B" [% ]7 d$ y- v
在以太坊区块链运行时,开放式贷款协议,如MakerDAO、Compound和Aave,使用预言机获取外部数据。MakerDAO是最受欢迎的DeFi开放式借贷协议之一,其Dai代币与美元挂钩,并由加密资产支持。& C- t0 N/ r [" @5 Q
, c g4 G& N2 p6 q) T! SMakerDAO使用a 预言机模块确定资产的实时价格。该模块由预言机的白名单地址和聚合器合同组成。预言机定期向聚合器发送价格更新,聚合器确定中间价格,然后在平台上用作参考价格。
8 B' ?2 C! D( M% o
5 ^1 E8 _2 u9 J8 y+ s9 LCompound是一项货币市场协议,允许用户赚取利息和/或借入资产作为抵押品。类似于MakerDAO,Compound还使用预言机收集价格信息,然后将这些信息转发到其价格馈送,该馈送由Compound原生代币COMP持有者的“管理员”管理和控制。) K3 A3 L* T5 o8 [
( n" [0 T& o+ F9 q0 d
闪电贷款2 K4 W" R. ?0 ^' n2 ~ P! w2 }. u
与流动性挖矿的概念一样,去中心化金融( DeFi)也提出了一种新的流动性机制。这叫“闪贷”。闪贷允许用户从链上的流动性池中借入资产,无需预抵押,只要在同一笔交易中将借入的流动性加上少量费用返还给流动性池即可。6 @- P: R9 u/ v1 t9 x
3 G `& \" c0 i! a# o; w- N4 U9 ]6 p* I
这一创新设计增加了所有用户在各种使用情况下获得资本的机会,同时确保了基本流动性池的充足和持续偿付能力。% q+ d" O) m! Z" e8 F- M- J
]7 g R+ ?+ p4 a3 B1 W
在短时间内(一笔交易的跨度),闪贷可以让任何人成为拥有充足资本的参与者,提供数亿美元的流动性。3 o3 k/ W, P4 h* L8 o" }7 }) M; Y
8 X3 y- i6 @* u0 E9 C
这为套利、抵押品交换和杠杆仓位创造了独特的机会,但也带来了一定的风险,尤其是对于一个拥有去中心化和安全协议的新生生态系统而言。智能合约开发人员应该了解这些风险,以便为用户构建更强大的应用程序。
' F1 |& ~- v& J3 w* X- h' `2 }/ |9 J8 y. D! q- @$ }0 I
闪电贷款和预言机进攻
& k5 T% C4 V- p从单一来源获得价格的协议很容易被拥有大量资金的恶意行为者所利用,他们可以通过一笔大交易来操纵市场。
5 _: t7 `9 q4 `1 |8 }1 I# S+ w k; a4 A0 j8 K9 R+ l
由于快速贷款可以在任何时候为世界上的任何人提供即时和可观的流动性,它们越来越多地被用于资助对DeFi协议的攻击。但是,这里有一个关键的区别:闪电贷款只为执行攻击提供资金-真正的问题是它没有为市场覆盖提供足够的集中价格预言机。 |