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将 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 提供自定义交易验证过程。