Как я могу создавать умные контракты и активы с JS?
Я пытаюсь написать умные контракты для Waves Platform, насколько я понял, нет умных контрактов, как в Ethereum, есть умные аккаунты и умные активы, которые могут проверять транзакции, но как я могу создать эти умные контракты и активы? Я не нашел методов в библиотеке JS ( https://github.com/wavesplatform/waves-api).
1 ответ
На самом деле, да, вы правы, нет умных контрактов, как в Ethereum, но есть умные аккаунты и умные активы. По сути, интеллектуальная учетная запись Waves может проверять, соответствует ли транзакция определенным условиям, которые определены в сценарии, до того, как транзакция будет передана для включения в следующий сгенерированный блок. Таким образом, вы можете использовать скрипт в своей учетной записи, который позволит вам контролировать все исходящие транзакции в различных случаях использования, включая 2FA, Multisig, условное депонирование и оракулы среди прочих (вы можете сделать это с помощью транзакции SetScript). Концепция интеллектуальных активов проста: интеллектуальные активы представляют собой активы с прикрепленным сценарием, который проверяет каждую транзакцию в этом активе (это можно сделать с помощью транзакции SetAssetScript).
Если вы хотите узнать больше, вы можете проверить разделы "Умные учетные записи" и "Умные активы". Вы можете начать создание умной учетной записи или умных активов с помощью 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 и в Github. Библиотека Waves API JS устарела, для этой цели вы можете использовать Waves Transactions.