从资源模型角度看待意图

意图,一种抽象

在像Anoma这样的以意图为中心的协议中,用户通过向意图gossip网络提交他们的意图来发起链上状态变更。意图是用户偏好的表示,它约束了所发起的状态转换。无论构建什么样的交易,意图都在所有可能满足的状态转换中保持不变,这意味着无论构建什么样的交易,用户的意图都将被满足。解算器(Solvers)是接收用户意图并将它们匹配在一起、构建平衡交易的参与者。

约束和偏好

意图有两个组成部分:约束和偏好。约束对应于必须满足的硬性要求,只有满足这些要求,意图才被视为得到满足。偏好则对应于如何更好地满足意图的附加信息,但不一定要强制执行才能使意图被视为满足。在本文中,我们只考虑表达约束的方式。

资源模型基础

本节简要介绍资源模型的组成部分。要了解更多关于资源模型的信息,请查看这篇博客文章

  • 资源: 资源模型中的原子状态单位
  • 资源逻辑: 与每个资源相关联的谓词。它指定了可以创建和消耗资源的条件。每个资源逻辑都属于某个应用程序
  • 资源数量: 与资源相关联的数值。当资源被消耗时,其数量被假定为正值;当资源被创建时,数量被假定为负值
  • 资源种类: 资源的可替代性域。从资源的组成部分(包括资源逻辑)计算得出
  • 应用程序: 由其逻辑以及读写接口特征化的虚拟结构。与应用程序逻辑相关联的资源构成了应用程序的状态
  • 交易: 状态更新的表示。解算器构建交易以满足用户的意图。交易可以是平衡的或不平衡的
  • 交易平衡: 在此交易中消耗和创建的资源数量之和,按每种资源种类计算
  • 平衡交易: 对于每种资源类型,数量之和等于零的交易。只有平衡交易才能被执行
  • 不平衡交易: 不平衡的交易🤷🏻‍♀️。不平衡交易被组合直到平衡,然后如果有效,就被排序和执行

在下图中,矩形表示由虚线矩形(不平衡交易)组成的平衡交易。方块代表资源,灰色方块是同一种类的资源。应用程序的状态更新为秋天:绿叶资源被消耗(正数量),橙叶资源被创建(负数量)。

意图是[不平衡的]交易吗?

不是。为了向解算器传达他们的意图,用户将他们的初始不平衡交易发送到意图gossip网络。交易约束可以表示为:

  1. 用户发起的交易所隐含的部分状态转换
  2. 直接的资源逻辑或为了使资源逻辑得到满足而必须返回true的谓词
  3. 我们尚未想到的其他方式(本文不描述)

意图不等同于[不平衡的]交易。让我们仔细看看表达约束的两种方式,以更好地理解原因。

表达约束的两种方式

I. 创建你想要的

当用户确切知道他们想要什么时,他们可以简单地产生一个不平衡交易,创建他们想要的资产。这个交易是不平衡的(因为所需的资产是为用户创建的,但实际上并未被前一个所有者给予或消耗。前一个所有者甚至尚未知晓),解算器的目标是找到一个能平衡给定交易的交易。

II. 在谓词中描述你想要的

如果用户不确切知道他们想要什么,只知道所需资产的一些属性,他们可以在与交易中涉及的某些资源相关联的资源逻辑中指定约束。

应用程序可能会将一些约束执行逻辑作为其自身逻辑的一部分(例如,这个无尺度kudos应用程序实现允许表达某些形式的意图),或者它可以与作为表达意图方式的"载体"应用程序结合使用。这种载体应用程序的逻辑规定,只有在满足其携带的意图谓词时,才能消耗其资源。用户会在初始交易中创建一个载体资源。在交易中消耗载体资源证明了意图得到了满足。

比较

将约束表达为谓词允许指定所需资产必须具有的属性,而无需指定其余部分,但这要求使用中的应用程序或可用于表达约束的载体应用程序实现某些功能。另一方面,通过直接创建所需资产来表达约束不依赖于任何应用程序的约束表达逻辑,但要求用户确切知道他们想要什么:所有所需资源的种类、数量和所有其他资源组件。

结论

意图 = 偏好 + 约束。约束可以通过直接创建所需资产来表达,也可以通过在谓词中描述其属性来表达。在这两种情况下,资源机器都确保意图得到满足。