You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于RIDE语言创建仅可与发行方交易的Waves智能资产问询

解决Waves智能资产仅与发行方交易的RIDE脚本及Matcher验证逻辑

嘿,我来帮你梳理下这个问题——你想要创建一个只能和发行方交易的Waves智能资产,同时搞清楚matcher是怎么验证订单的对吧?先从你现有代码的问题说起,再给你正确的实现思路和脚本示例。

先说说你现有代码的问题

你直接在ExchangeTransaction里判断sellOrder.sender或buyOrder.sender等于发行方,但忽略了两个关键:

  1. 智能资产的脚本只需要管控涉及自身的交易,你没判断交易里是否包含当前资产,会导致脚本错误拦截所有ExchangeTransaction;
  2. 逻辑覆盖不全——比如如果交易的两个资产都不是你的智能资产,脚本会返回false,这显然不合理。

Matcher的订单验证流程

Waves的matcher验证订单分两步:

  • 提交订单时的预检查:matcher会先验证订单的签名是否有效、订单参数是否合法(比如金额、资产ID正确),但不会执行资产脚本;
  • 撮合交易时的链上验证:当matcher把两个订单撮合生成ExchangeTransaction后,这个交易会被提交到链上,由节点执行资产的verify函数——只有脚本返回true,交易才会被确认,否则会被拒绝,matcher也不会完成这次撮合。

简单说,资产脚本是最终的验证依据,matcher只是负责撮合,最终合法性由链上脚本判断。

正确的RIDE资产脚本实现

下面是满足你需求的脚本,核心是只管控涉及当前智能资产的交易,确保每笔交易的另一方都是发行方:

// 定义发行方地址,替换成你的实际地址
let me = Address(base58'fg4h23j13g4h2j1g4')

// 资产脚本的核心验证函数
fun verify(tx: Transaction): Boolean =
  match tx {
    // 处理交易所交易
    case t: ExchangeTransaction =>
      // 判断当前资产是否在卖单或买单中
      let isOurAssetInSell = t.sellOrder.assetId == thisAssetId
      let isOurAssetInBuy = t.buyOrder.assetId == thisAssetId
      
      if (isOurAssetInSell) {
        // 如果卖的是我们的资产,买单的发起方必须是发行方
        t.buyOrder.sender == me
      } else if (isOurAssetInBuy) {
        // 如果买的是我们的资产,卖单的发起方必须是发行方
        t.sellOrder.sender == me
      } else {
        // 交易不涉及我们的资产,直接允许(脚本只管控自身资产)
        true
      }
    // 处理转账交易(可选,根据你的需求调整)
    case t: TransferTransaction =>
      // 限制转账只能是发行方发起,或者转给发行方
      t.sender == me || t.recipient == me
    // 其他交易类型(比如发行、销毁等,根据需求调整)
    case _ =>
      // 如果你只允许发行方操作其他交易,就返回 tx.sender == me;如果不需要限制,返回true
      tx.sender == me
  }

关键细节解释

  • thisAssetId:RIDE的内置变量,代表当前智能资产的ID,必须用它来判断交易是否涉及你的资产;
  • 交易所交易的判断逻辑:确保每次涉及你资产的交易,另一方都是发行方——卖资产时买家是发行方,买资产时卖家是发行方;
  • 其他交易类型:比如转账,你可以根据需求限制为只能由发行方发起,或者只能转给出发行方,避免资产被随意转移;
  • 脚本不可更改:资产脚本部署后就无法修改,一定要在测试网先测试没问题再部署到主网。

内容的提问来源于stack exchange,提问作者Nazim Faour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:04:02