消费资产交易用于消费您拥有的资产。用例包括:

  • 您向公园、电影院、博物馆、健身房管理人士出示/使用您的门票
  • 您将资产用作证书,获得特定的一次性收益

因此,如果需消费资产,发起方必须是属于资产发行者的钱包,如电影院。消费交易在检查点预签署(如电影院入场口),然后,用户可通过 multisig 消息数据字段的资产地址多次签署交易。请查看下方解释。

协议定义

如需更新资产,您应使用UpdateAssetTx消息:

message ConsumeAssetTx {
string issuer = 1;
string address = 2;
google.protobuf.Any data = 15;
}

在此,根据情况,issuer可与from相同或各异。当 tx 由资产持有者多次签署时,钱包可检查发行者是否为资产发行者;若不是,钱包可拒绝签署。在链中执行时,在验证状态阶段,我们应检查此 tx 的from

  • 与发行者相同
  • from.issuer == issuer

例如,博物馆发行了一张门票,Alice购买了该门票。在博物馆大门口,Alice需消费资产,她可以

用预生成的 ConsumeAssetTx 扫描二维码。大多数时候,预生成的 tx 应由门口的账户签署,以便追踪Alice在哪里以及如何使用了该资产。但是,我们不希望任何人都能创建这个 tx,吸引Alice消费资产,因此,门应是博物馆发行的账户。链将确保只有拥有此发行者的帐户可成功签署此 tx。

address是该资产的母地址。因为一个资产可能属于另一个资产,如,一张门票属于一场特定的音乐会或电影资产。如果提供了,除发行者外,我们也会验证资产的母地址是否等于此地址。此处address为可选项。

以下为消费资产的示例:

# say we have two wallets: cinema and alice, alice has an asset ticket

itx = ForgeAbi.ConsumeAssetTx.new(issuer: cinema.address)

tx = ForgeSdk.prepare_consume_asset(itx, wallet: cinema)

# then alice attach her signature to this tx

tx = ForgeSdk.finalize_consume_asset(tx, ticket.address, wallet)