# Развертывание смарт-контрактов
Убедитесь в выполнении требований для развертывания смарт-контракта.
# Требования
- Кошелёк: Создайте кошелёк с помощью Keeper Wallet или WX Network.
Примечание: Сохраните сид-фразу кошелька для отправки транзакций.
- Токены: Получите токены WAVES для оплаты комиссии за транзакции за развертывание каждого скрипта:
- Для сети Mainnet: Приобретите 0.001 WAVES через доступные способы пополнения кошелька.
- Для сети Testnet: Приобретите 0.001 WAVES через Faucet.
- Для сети Stagenet: Приобретите 0.001 WAVES через Faucet.
# Руководство
Выполните шаги инструкции для необходимого типа смарт-контракта:
# Запуск dApp
- Создайте скрипт вашего dApp-приложения:
// Пример скрипта: {-# STDLIB_VERSION 8 #-} {-# CONTENT_TYPE DAPP #-} {-# SCRIPT_TYPE ACCOUNT #-} @Callable(i) func checkStorageUntouchedByAlias(accountAlias: String) = { let alias = Alias(accountAlias) let res = if isDataStorageUntouched(alias) then { unit } else { throw("Хранилище данных было изменено этим псевдонимом") } ([], res) }
- Отправьте транзакцию Set Script, указав:
- Вашу сид-фразу в переменной
seedPhrase
. - Скрипт вашего dApp-приложения в переменной
scriptSource
.// Пример форматирования: String scriptSource = "{-# STDLIB_VERSION 8 #-}\n" + "{-# CONTENT_TYPE DAPP #-}\n" + "{-# SCRIPT_TYPE ACCOUNT #-}\n\n" + "@Callable(i)\n" + "func checkStorageUntouchedByAlias(accountAlias: String) = {\n" + " let alias = Alias(accountAlias)\n" + " let res = if isDataStorageUntouched(alias) then {\n" + " unit\n" + " } else {\n" + " throw(\"Хранилище данных было изменено этим псевдонимом\")\n" + " }\n" + " ([], res)\n" + "}";
# Запуск смарт-аккаунта
- Создайте скрипт вашего смарт-аккаунта:
// Пример скрипта: {-# STDLIB_VERSION 6 #-} {-# CONTENT_TYPE EXPRESSION #-} {-# SCRIPT_TYPE ACCOUNT #-} let cooperPubKey = base58'BVqYXrapgJP9atQccdBPAgJPwHDKkh6A8' let BTCId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS' match tx { case o: Order => sigVerify(o.bodyBytes, o.proofs[0], cooperPubKey ) && (o.assetPair.priceAsset == BTCId || o.assetPair.amountAsset == BTCId) case _ => sigVerify(tx.bodyBytes, tx.proofs[0], cooperPubKey ) };
- Отправьте транзакцию Set Script, указав:
- Вашу сид-фразу в переменной
seedPhrase
. - Скрипт вашего смарт-аккаунта в переменной
scriptSource
.// Пример форматирования: String scriptSource = "{-# STDLIB_VERSION 6 #-}\n" + "{-# CONTENT_TYPE EXPRESSION #-}\n" + "{-# SCRIPT_TYPE ACCOUNT #-}\n\n" + "let cooperPubKey = base58'BVqYXrapgJP9atQccdBPAgJPwHDKkh6A8'\n" + "let BTCId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'\n" + "match tx {\n" + " case o: Order =>\n" + " sigVerify(o.bodyBytes, o.proofs[0], cooperPubKey ) && \n" + " (o.assetPair.priceAsset == BTCId || o.assetPair.amountAsset == BTCId)\n" + " case _ => sigVerify(tx.bodyBytes, tx.proofs[0], cooperPubKey )\n" + "};";
# Запуск смарт-ассета
- Создайте скрипт вашего смарт-ассета:
// Пример скрипта: {-# STDLIB_VERSION 6 #-} {-# CONTENT_TYPE EXPRESSION #-} {-# SCRIPT_TYPE ASSET #-} func trueReturner () = { true } trueReturner()
- Выберите подходящий вариант в зависимости от вашей цели:
# Создание смарт-ассета
Отправьте транзакцию Issue, указав:
- Вашу сид-фразу в переменной
seedPhrase
. - Скрипт вашего смарт-ассета в переменной
scriptSource
.// Пример форматирования: String scriptSource = "{-# STDLIB_VERSION 6 #-}\n" + "{-# CONTENT_TYPE EXPRESSION #-}\n" + "{-# SCRIPT_TYPE ASSET #-}\n\n" + "func trueReturner () = {\n" + " true\n" + "}\n\n" + "trueReturner()";
# Добавление скрипта ассета
Отправьте транзакцию Set Asset Script, указав:
- Вашу сид-фразу в переменной
seedPhrase
. - ID вашего ассета в переменной
assetId
. - Скрипт вашего смарт-ассета в переменной
scriptSource
.// Пример форматирования: String scriptSource = "{-# STDLIB_VERSION 6 #-}\n" + "{-# CONTENT_TYPE EXPRESSION #-}\n" + "{-# SCRIPT_TYPE ASSET #-}\n\n" + "func trueReturner () = {\n" + " true\n" + "}\n\n" + "trueReturner()";