wavesplatform - 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)
解决方案
如果您尝试编译代码,您会看到如下错误
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))
推荐阅读
- mongodb - 如何指定作为对象数组的字段,数组对象在 Mongoose 中具有唯一但可选的属性之一?
- html - 在不使用 ERB 的情况下呈现 HTML 表单
- c++ - #define 不被库识别
- scala - 如何将输入文件中的每个 Json 对象读取到 spark DataFrame 中的一行
- machine-learning - 所有模型都需要在构建模型之前对数据进行缩放吗?
- node.js - 使用 Mocha 读取生态系统变量(单元测试)
- python - 带有 telnet 写入的脚本不起作用
- c# - VS 编译正确,但命令行不正确
- compiler-construction - 函数 yylex() 中对 yylval 的未定义引用;
- clojure - 将元素添加到向量(conj 函数)并保持更改