本内容由德语机器翻译而成,尚未经母语人士审校。技术和监管术语以德语或英语版本为准。

智能合约是什么——又不是什么

一个带有状态和权限的程序。它既不是法律意义上的合同,也不是一个知道链外发生了什么的主体。

本课未经专业审阅。它是为本平台撰写的,并依据所列证据写成;未进行过独立的专业审阅。

学习目标

  • 您能够解释为什么智能合约对链外世界一无所知。
  • 您能够说出智能合约依赖于其他事物的三个环节。

检查预备知识

请在继续阅读之前,先自行回答这些问题。您犹豫的地方,正是本课的价值所在。

核心概念

事实

一个持有价值的程序

智能合约是位于链上某个地址的代码。它有一个状态——余额、参数、权限——以及按照固定规则更改该状态的函数。每一次执行都是一笔交易,需要付费,并可在账本中追溯。

事实

合约只看得见链

智能合约无法查询任何不在链上的内容。它不知道汇率、天气或交货情况。一切外部信息都必须由某人作为交易写入其中——这正是预言机所做的事。因此,合约关于外部世界的每一项表述,其可靠程度都取决于写入它的那个来源。

风险

代码中看不到的三项依赖

合约依赖于预言机提供给它的数据;依赖于它自身调用的合约;依赖于某人对它保留的权利。仅凭代码只能看到这三项中的第二项。其余两项需要从文档和链上状态中查明——它们在概览中缺失,并不说明它们实际上不存在。

术语

智能合约 见术语表
位于链地址上、按固定规则管理资产的程序代码。
预言机(Oracle)
一种把链外数据写入合约的机制。
状态(State)
合约在某一时点存储的值。

模型

  1. 自身代码——可检查、有版本、可审计

  2. 被调用的合约——在代码中可见,自带风险

  3. 预言机数据——不在代码中,决定结果

  4. 保留的权利——不在代码中,决定规则

合约依赖于什么 — 代码审计只能完整呈现前两个层级。

计算示例

一次无人触发的清算

预言机给出的价格
1,800 USD
流动性交易场所的价格
1,950 USD
清算阈值
1,850 USD

合约按 1,800 USD 计算,因为这是写在它里面的值。别处以 1,950 USD 成交这一事实,对它而言并不存在。

该头寸被清算。

解读: 执行清算的不是市场,而是数据来源。持有该头寸的人所暴露的风险来自预言机,而不是价格。

提取练习

智能合约如何知道一项资产的价格?

基于真实数据的练习

请在 Explorer 中打开一个市场,查看所列出的依赖链。针对每个环节问自己:这里发生故障时,我能否在其生效之前看到?

查看一个市场的依赖链 →

应用

某提供者宣传其协议“已全面审计”。这一表述未涵盖哪些风险?

相关案例研究

机构视角解读

银行
按照内部标准,这些依赖中哪些需要记录在案?
保险
四个层级中,哪一个能够以可保险的方式加以表述?

要点

证据