我正在尝试为Waves Platform编写智能合约,据我了解,没有像以太坊中那样的智能合约,没有可以验证交易的智能账户和智能资产,但是我如何创建这种智能合约呢?合同和资产?我在JS库(https://github.com/wavesplatform/waves-api)中找不到方法。
答案 0 :(得分:3)
实际上是的,您是对的,没有像以太坊那样的智能合约,但是有智能账户和智能资产。 基本上, Waves智能帐户可以在提交交易以将其包含在下一个生成的块中之前检查交易是否满足脚本中定义的某些条件。因此,您可以在帐户上使用脚本,该脚本将允许您控制不同用例中的所有传出交易,包括2FA,Multisig,托管和预付款等(您可以使用 SetScript交易进行此操作)。 智能资产的概念很简单,智能资产是带有附件脚本的资产,该脚本可验证该资产内的每个交易(您可以使用 SetAssetScript交易来做到这一点)。 / p>
如果您想了解更多信息,可以查看智能帐户和智能资产部分。 您可以通过smart account开始创建smart assets或Waves IDE, 这是一个制作白名单用例的简单智能资产示例:
let whiteListAccount = tx.sender
match tx {
case tx : TransferTransaction =>
let recipient = toBase58String(addressFromRecipient(tx.recipient).bytes)
isDefined(getInteger(whiteListAccount, recipient))
case _ => true
}
这是2-3个MultiSig的简单智能帐户示例:
#define public keys
let alicePubKey = base58'5AzfA9UfpWVYiwFwvdr77k6LWupSTGLb14b24oVdEpMM'
let bobPubKey = base58'2KwU4vzdgPmKyf7q354H9kSyX9NZjNiq4qbnH2wi2VDF'
let cooperPubKey = base58'GbrUeGaBfmyFJjSQb9Z8uTCej5GzjXfRDVGJGrmgt5cD'
#check whoever provided the valid proof
let aliceSigned = if(sigVerify(tx.bodyBytes, tx.proofs[0], alicePubKey )) then 1 else 0
let bobSigned = if(sigVerify(tx.bodyBytes, tx.proofs[1], bobPubKey )) then 1 else 0
let cooperSigned = if(sigVerify(tx.bodyBytes, tx.proofs[2], cooperPubKey )) then 1 else 0
#sum up every valid proof to get at least 2
aliceSigned + bobSigned + cooperSigned >= 2
您可以在Waves IDE,Waves documentation和Github中找到更多示例。 Waves API JS库已过时,您可以为此使用Waves Transactions。