Payment.assetId 数据类型

Payment.assetId data type

我正在尝试处理示例 https://docs.wavesplatform.com/en/smart-contracts/ride4dapps/examples.html 并稍微更改它以将其扩展到任何类型的资产。不清楚函数返回的是什么类型的数据,如何带入字符串,以便后面写入state。

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)

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

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))