Как я могу создавать умные контракты и активы с 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.

Другие вопросы по тегам