waves_logo Docs
  • Обзор
    Обзор
  • Практические руководства
    • Получение данных из блокчейна
      Получение данных из блокчейна
    • Создание и отправка транзакций
      Создание и отправка транзакций
    • Токенизация
      Токенизация
    • Распространение токена (airdrop)
      Распространение токена (airdrop)
    • Прием платежей
      Прием платежей
    • Обмен токенов
      Обмен токенов
    • Простое голосование
      Простое голосование
    • Список как аргумент
      Список как аргумент
    Практические руководства
  • Смарт-контракты Waves
    Смарт-контракты Waves
  • dApp
    • Создание и запуск dApp
      Создание и запуск dApp
    dApp
  • Cмарт-аккаунт
    • Создание смарт-аккаунта
      Создание смарт-аккаунта
    • [en] Creating and deploying a script manually
      [en] Creating and deploying a script manually
    • [en] Video tutorials
      [en] Video tutorials
    Cмарт-аккаунт
  • Cмарт-ассет
    Cмарт-ассет
  • Инструменты разработчика
    • Waves IDE
      Waves IDE
    • Расширение для VS Code
      Расширение для VS Code
    • Surfboard
      Surfboard
    • Ride REPL
      Ride REPL
    Инструменты разработчика
  • Signer ◆
    Signer ◆
  • Waves API
    • Data Service API
      Data Service API
    • Node REST API 🡥
      Node REST API 🡥
    • Node gRPC Server 🡥
      Node gRPC Server 🡥
    • Blockchain Updates 🡥
      Blockchain Updates 🡥
    Waves API
  • Клиентские библиотеки
    • Waves C#
      • Установка SDK
        Установка SDK
      • Запуск кода
        • Отправка транзакций
          Отправка транзакций
        • Использование криптографических утилит
          Использование криптографических утилит
        • Взаимодействие с нодой
          Взаимодействие с нодой
        • Развертывание смарт-контрактов
          Развертывание смарт-контрактов
        Запуск кода
      Waves C#
    • Gowaves
      • Установка SDK
        Установка SDK
      Gowaves
    • WavesJ
      • Установка SDK
        Установка SDK
      WavesJ
    • Ts-lib-crypto
      • Установка SDK
        Установка SDK
      Ts-lib-crypto
    • Waves-PHP
      • Установка SDK
        Установка SDK
      Waves-PHP
    • Waves-python
      • Установка SDK
        Установка SDK
      Waves-python
    • Waves-rust
      • Установка SDK
        Установка SDK
      Waves-rust
    Клиентские библиотеки
      • English
      • Русский
      On this page
        • Требования
        • Руководство
      waves_logo Docs

          # Развертывание смарт-контрактов

          Убедитесь в выполнении требований для развертывания смарт-контракта.

          # Требования

          • Кошелёк: Создайте кошелёк с помощью Keeper Wallet или WX Network .

            Примечание: Сохраните сид-фразу кошелька для отправки транзакций.

          • Токены: Получите токены WAVES для оплаты комиссии за транзакции за развертывание каждого скрипта:
            • Для сети Mainnet: Приобретите 0.001 WAVES через доступные способы пополнения кошелька .
            • Для сети Testnet: Приобретите 0.001 WAVES через Faucet .
            • Для сети Stagenet: Приобретите 0.001 WAVES через Faucet .

          # Руководство

          Выполните шаги инструкции для необходимого типа смарт-контракта:

          • dApp.
          • Смарт-аккаунт.
          • Смарт-ассет.

          # Запуск dApp

          1. Создайте скрипт вашего dApp-приложения:
            // Пример скрипта:
            {-# STDLIB_VERSION 3 #-}
            {-# SCRIPT_TYPE ACCOUNT #-}
            {-# CONTENT_TYPE DAPP #-}
            let answersCount = 20
            
            let answers =
                ['Точно',
                'Да - определенно',
                'Можете быть уверенны!',
                'Мне кажется, да',
                'Мой ответ - нет', 
                'Мои источники говорят - нет',
                'Сомневаюсь'].
            
            func getAnswer (question,previousAnswer) = {
                let hash = sha256(toBytes((question + previousAnswer)))
                let index = toInt(hash)
                answers[(index % answersCount)]
            }
            
            func getPreviousAnswer (address) = match getString(this, (address + '_a')) {
                case a: String => a
                case _ => address
            }
            
            @Callable(i)
            func tellme (question) = {
                let callerAddress = toBase58String(i.caller.bytes)
                let answer = getAnswer(question, getPreviousAnswer(callerAddress))
                WriteSet([DataEntry((callerAddress + '_q'), question), DataEntry((callerAddress + '_a'), answer)])
            };
            
          2. Отправьте транзакцию Set Script, указав:
          • Вашу сид-фразу в переменной senderPrivateKey.

          • Скрипт вашего dApp-приложения в переменной txScript.

            Примечание: Используйте \n" + для корректного форматирования многострочного скрипта.

            // Пример форматирования:
            var txScript = "{-# STDLIB_VERSION 3 #-}\n" +
                "{-# SCRIPT_TYPE ACCOUNT #-}\n" +
                "{-# CONTENT_TYPE DAPP #-}\n" +
                "let answersCount = 20\n" +
            
                "let answers =\n" +
                "['Точно',\n" +
                "'Да - определенно.',\n" +
                "'Можете быть уверенны!',\n" +
                "'Мне кажется, да',\n" +
                "'Мой ответ - нет', \n" +
                "'Мои источники говорят - нет',\n" +
                "'Сомневаюсь']\n" +
            
                "func getAnswer (question,previousAnswer) = {\n" +
                    "let hash = sha256(toBytes((question + previousAnswer)))\n" +
                    "let index = toInt(hash)\n" +
                    "answers[(index % answersCount)]\n" +
                "}\n" +
            
                "func getPreviousAnswer (address) = match getString(this, (address + '_a')) {\n" +
                    "case a: String => a\n" +
                    "case _ => address\n" +
                "}\n" +
            
                "@Callable(i)\n" +
                "func tellme (question) = {\n" +
                    "let callerAddress = toBase58String(i.caller.bytes)\n" +
                    "let answer = getAnswer(question, getPreviousAnswer(callerAddress))\n" +
                    "WriteSet([DataEntry((callerAddress + '_q'), question), DataEntry((callerAddress + '_a'), answer)])\n" +
                "}";
            

          # Запуск смарт-аккаунта

          1. Создайте скрипт вашего смарт-аккаунта:
            // Пример скрипта:
            {-# 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 )
            };
            
          2. Отправьте транзакцию Set Script, указав:
          • Вашу сид-фразу в переменной senderPrivateKey.

          • Скрипт вашего смарт-аккаунта в переменной txScript.

            Примечание: Используйте \n" + для корректного форматирования многострочного скрипта.

            // Пример форматирования:
            var txScript = "{-# STDLIB_VERSION 6 #-}\n" +
                "{-# CONTENT_TYPE EXPRESSION #-}\n" +
                "{-# SCRIPT_TYPE ACCOUNT #-}\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" +
                "}";
            

          # Запуск смарт-ассета

          1. Создайте скрипт вашего смарт-ассета:
            // Пример скрипта:
            {-# STDLIB_VERSION 6 #-}
            {-# CONTENT_TYPE EXPRESSION #-}
            {-# SCRIPT_TYPE ASSET #-}
            
            func trueReturner () = {
                true
            }
            trueReturner()
            
          2. Выберите подходящий вариант в зависимости от вашей цели:
          • Создание смарт-ассета.
          • Добавление скрипта для ассета.

          # Создание смарт-ассета

          Отправьте транзакцию Issue, указав:

          • Вашу сид-фразу в переменной senderPrivateKey.

          • Скрипт вашего смарт-ассета в переменной txScript.

            Примечание: Используйте \n" + для корректного форматирования многострочного скрипта.

            // Пример форматирования:
            var txScript =
                "{-# STDLIB_VERSION 6 #-}\n" +
                "{-# CONTENT_TYPE EXPRESSION #-}\n" +
                "{-# SCRIPT_TYPE ASSET #-}\n" +
                "func trueReturner() = {\n" +
                    "true\n" +
                "}\n" +
                "trueReturner()";
            

          # Добавление скрипта ассета

          Отправьте транзакцию Set Asset Script, указав:

          • Вашу сид-фразу в переменной senderPrivateKey.

          • ID вашего ассета в переменной assetId.

          • Скрипт вашего смарт-ассета в переменной script.

            Примечание: Используйте \n" + для корректного форматирования многострочного скрипта.

            // Пример форматирования:
            var script =
                "{-# STDLIB_VERSION 6 #-}\n" +
                "{-# CONTENT_TYPE EXPRESSION #-}\n" +
                "{-# SCRIPT_TYPE ASSET #-}\n" +
                "func trueReturner() = {\n" +
                    "true\n" +
                "}\n" +
                "trueReturner()";
            
          Взаимодействие с нодой
          Gowaves
          Взаимодействие с нодой
          Gowaves