4

我正在尝试为 Waves 平台编写智能合约,据我了解,没有像以太坊那样的智能合约,有智能账户和智能资产,可以验证交易,但我如何创建智能合约和资产? 我没有在 JS 库 ( https://github.com/wavesplatform/waves-api ) 中找到方法。

4

1 回答 1

4

实际上是的,你是对的,没有像以太坊那样的智能合约,但有智能账户和智能资产。基本上,Waves 智能账户可以在提交交易以包含在下一个生成的块中之前检查交易是否满足脚本中定义的某些条件。因此,您可以在您的帐户上使用脚本,该脚本将允许您控制不同用例中的所有传出交易,包括 2FA、Multisig、托管和预言机等(您可以使用SetScript Transaction来做到这一点)。智能资产的概念很简单,智能资产是带有附加脚本的资产,该脚本验证该资产中的每笔交易(您可以使用SetAssetScript Transaction来做到这一点)。

如果您有兴趣阅读更多内容,可以查看智能账户和智能资产部分。您可以通过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 IDEWaves 文档Github中找到更多示例。Waves API JS 库已过时,您可以为此目的使用Waves Transactions 。

于 2019-02-22T11:07:16.677 回答