Aspect 生命周期

Aspect 的生命周期包括多个阶段:部署、升级、配置、绑定、解绑、执行和销毁。

需要注意的是,Aspect 核心是一个位于地址 0x0000000000000000000000000000000000A27E14 的系统合约,管理所有 Aspect 生命周期操作。有关 Aspect 核心 ABI 的更多详细信息,请参考 此链接

部署

部署一个 Aspect 类似于部署传统智能合约。通过 EOA 交易部署 Aspect 时,需要提供以下关键信息:

参数名称 必要性 描述
code Aspect 的 WASM 工件字节码,以十六进制格式表示。
properties Aspect 的初始只读状态。
account 结算账户,负责支付 Aspect 的 gas 费用。某些 Aspect 操作会产生 gas 成本。目前,结算账户默认是合约调用的发送者,但未来版本将支持自定义结算账户。
proof 未来支持自定义结算账户绑定验证的占位符。

与智能合约一样,一旦部署,Aspect 将接收一个唯一的 ID,等同于 EVM 地址类型(20 字节)。初始部署时,Aspect 的版本为 1.

Aspect 的状态可以表示为 JSON 形式:


{
  "id": "0xABCDEF....",
  "code": {
    "1": "0xABCDEF...."
  },
  "properties": {
    "property-name": "property-value",
    ...
  },
  "settlementAccount": "0xABCDEF....",
  "currentVersion": 1
}

升级 Aspect 不会中断其当前的绑定状态。绑定到旧版 Aspect 的合约将继续执行旧代码。请确保你的 Aspect 具有向后兼容性,以防发生意外。

Binding

Binding将 Aspect 与特定智能合约关联起来。只有通过合约中定义的 isOwner(address): bool 方法验证的智能合约所有者才能发起此过程。

绑定过程需要:

参数名称 必须 描述
aspectId 要绑定的 Aspect 的 ID。
aspectVersion 要绑定的 Aspect 的版本。使用 0 绑定到最新版本。
account 要与 Aspect 绑定的账户地址。
priority Aspect 的执行优先级。数字越小,优先级越高。对于优先级相同的 Aspect,先绑定的先执行。

Aspect 核心合约记录绑定关系如下:

{
  "0x{AccountAddress}": [
    {
      "aspectId": "0x{AspectId1}",
      "aspectVersion": 1
    },
    {
      "aspectId": "0x{AspectId2}",
      "aspectVersion": 2
    }
    ...
  ]
}

绑定

绑定是基于 Aspect 开发中的一个重要过程。只有当 Aspect 绑定到特定智能合约时,Aspect 才能在某些 join points 被触发。EoA 也可以与 Aspect 绑定,Aspect 可以为 EoA 提供自定义交易验证过程。

步骤