首页 > 解决方案 > Payment.assetId 数据类型

问题描述

我正在尝试处理示例https://docs.wavesplatform.com/en/smart-contracts/ride4dapps/examples.html并对其进行一些更改以将其扩展到任何类型的资产。不清楚返回给函数的是什么类型的数据,以及如何把它带到字符串中,以便以后可以写入状态。

let payment = match(i.payment) { #even none or exact amount of the attached payment(InvokeScriptTransaction).
    case p : AttachedPayment => p
    case _ => throw("You have to provide a payment to deposit")
  }

let assetId = toBase58String(payment.assetId)

标签: wavesplatformride

解决方案


如果您尝试编译代码,您会看到如下错误

Compilation failed: Non-matching types: expected: ByteVector, actual: UNION(ByteVector|Unit) in 2176-2207

每次当变量的值不明确时,您都必须使用extract函数提取值。在这种情况下,你可以获得Unit(代表Waves的assetId)或byteVector(其他资产的assetId),所以你必须提取。以下代码适用于您的情况:

let assetId = toBase58String(extract(payment.assetId))

推荐阅读