Освоение космоса: руководство для начинающих по созданию и развертыванию смарт-контрактов

Освоение космоса: руководство для начинающих по созданию и развертыванию смарт-контрактов

22 февраля 2023 г.

Сеть Cosmos – одна из самых многообещающих сетей блокчейнов, обеспечивающая взаимодействие между различными платформами блокчейнов. , и для разработчиков становится все более важным понимать, как создавать и развертывать смарт-контракты в этой сети.

Смарт-контракты — это самоисполняющиеся контракты, условия которых записаны непосредственно в коде. Они являются жизненно важным компонентом децентрализованных приложений и имеют решающее значение для создания надежных и прозрачных систем. Поскольку спрос на децентрализованные приложения растет, понимание и использование смарт-контрактов становится обязательным условием для разработчиков, создающих и разрабатывающих приложения в Web3.

Поддерживает ли космос смарт-контракты? Да. В этом руководстве мы узнаем об экосистеме Cosmos и о том, как создать и развернуть смарт-контракт в сети Cosmos.

Понимание сети Cosmos

Консенсус Tendermint Core движок поддерживает независимые параллельные цепочки блоков, составляющие децентрализованную сеть Cosmos. Целью Cosmos Network является создание децентрализованной сети взаимосвязанных блокчейнов, которые могут расширяться и взаимодействовать, облегчая обмен данными и ценностями между различными блокчейн-платформами.

Tendermint — это механизм консенсуса Byzantine Fault Tolerant (BFT), который обеспечивает быструю и безопасную обработку транзакций. Он позволяет группе валидаторов согласовывать состояние сети через процедура голосования. Tendermint обеспечивает более быструю обработку транзакций по сравнению с традиционными методами консенсуса, основанными на доказательстве работы, такими как те, которые используются в биткойнах и эфириуме (теперь Proof of Stake).

Использование Cosmos Network протокола Inter-Blockchain Communication (IBC) имеет решающее значение. Взаимодействие между несколькими системами блокчейнов стало возможным благодаря IBC, который позволяет передавать ценности и данные между различными блокчейнами в Cosmos Network.

Кроме того, Cosmos Network имеет звездообразную архитектуру, которая позволяет разрабатывать автономные блокчейны (лучи), которые могут взаимодействовать с Cosmos Hub (концентратором). Обмен данными и валютой между различными цепочками блоков в сети возможен благодаря Cosmos Hub, который действует как сетевой концентратор.

Масштабируемость, безопасность и совместимость — это лишь некоторые из преимуществ Cosmos Network по сравнению с другими блокчейн-платформами. В целом это интригующая и многообещающая блокчейн-сеть.

Это желательная альтернатива для разработчиков, стремящихся создавать децентрализованные приложения, благодаря своей способности обрабатывать колоссальную пропускную способность и подключать несколько блокчейнов.

Почему Космос?

Протокол Inter-Blockchain Communication (IBC) и механизм консенсуса Tendermint Core образуют основу сети Cosmos, обеспечивая обмен ценностями и данными между различными блокчейнами в сети Cosmos. Более подробно об этом говорилось в предыдущем разделе, когда мы обсуждали экосистему Cosmos.

К основным чертам Cosmos Network относятся следующие:

  • Tendermint Core Consensus Engine: механизм консенсуса Byzantine Fault Tolerant, Tendermint обеспечивает быструю и безопасную обработку транзакций.
  • Протокол Inter-Blockchain Communication (IBC): IBC обеспечивает связь между несколькими блокчейнами внутри Cosmos Network, обеспечивая обмен ценностями и данными.
  • Cosmos Network поддерживает создание пользовательских токенов. Эти токены можно использовать в децентрализованных приложениях для представления цифровых активов или в качестве оплаты.
  • Масштабируемость. Использование независимых цепочек блоков с Tendermint Core позволяет ускорить обработку транзакций и увеличить количество транзакций в секунду.
  • Взаимодействие. Функция взаимодействия Cosmos Network позволяет разработчикам создавать децентрализованные приложения, взаимодействующие со многими системами блокчейна, включая Биткойн, Эфириум и другие.
  • Звездообразная архитектура. Архитектура Cosmos Network с центрально-лучевой структурой позволяет разрабатывать отдельные цепочки блоков, которые могут взаимодействовать с Cosmos Hub. Центральный узел сети, Cosmos Hub, облегчает обмен деньгами и информацией между ее несколькими блокчейнами.

В следующем разделе мы подробно рассмотрим практические аспекты создания и развертывания смарт-контрактов в космической сети.

Необходимое условие

Убедимся, что Node/NPM настроен на нашем компьютере. Здесь находится руководство, если оно еще не установлено.

Настройка и установка проекта

Перейдем к терминалу. Нам потребуется cd в любой каталог по нашему выбору, а затем выполнить следующие команды:

mkdir cosmos-project
cd cosmos-project 
npm init -y 
npm install --save-dev hardhat

Давайте создадим пример проекта с помощью следующей команды:

npx hardhat

Приведенная выше команда проверит, установлена ​​ли у нас каска глобально; если нет, он загрузит его из реестра npm и запустит команду, используя загруженную версию.

Примите следующие параметры.

Давайте запустим приведенную ниже команду, чтобы убедиться, что все работает правильно.

npx hardhat test

Результат прохождения теста появится в нашей консоли.

Теперь Lock.js можно удалить из каталога test, а deploy.js — из каталога scripts. После этого удалите Lock.sol в каталоге contracts.

==Сами папки удалять нельзя!==

Создайте смарт-контракт Greeter

В этом разделе будет создан файл Greeter.sol в каталоге контракта со следующим фрагментом кода.

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;

// Define a smart contract called "Greeter"
contract Greeter {
    // Define a public variable called "greeting" of type string
    string public greeting;

    // Define a constructor that takes in a string and assigns it to the "greeting" variable
    constructor(string memory _greeting) {
        greeting = _greeting;
    }

    // Define a function called "setGreeting" that allows the "greeting" variable to be changed
    function setGreeting(string memory _greeting) public {
        greeting = _greeting;
    }

    // Define a function called "greet" that returns the current "greeting" variable
    function greet() public view returns (string memory) {
        return greeting;
    }
}

В приведенном выше фрагменте кода важно отметить, что строка SPDX-License-Identifier: UNLICENSED служит уникальным идентификатором, указывающим на то, что код нелицензирован и доступен для всех.

Тестирование смарт-контракта

Создайте новый файл с именем Greeter-test.js в каталоге test и добавьте в него следующий фрагмент кода.

const { expect } = require("chai");
const { ethers } = require("hardhat");

describe("Greeter", function () {
  it("Should deploy the Greeter contract", async function () {
    // Get the contract factory for the "Greeter" contract
    const Greeter = await ethers.getContractFactory("Greeter");
    // Deploy the contract to the blockchain
    const greeter = await Greeter.deploy("Hello, world!");

    // Wait until the contract is deployed
    await greeter.deployed();

    // Check that the contract's greet() method returns the expected greeting
    expect(await greeter.greet()).to.equal("Hello, world!");
  });

  it("Should return the new greeting once it's changed", async function () {
    // Get the contract factory for the "Greeter" contract
    const Greeter = await ethers.getContractFactory("Greeter");
    // Deploy the contract to the blockchain
    const greeter = await Greeter.deploy("Hello, world!");

    // Wait until the contract is deployed
    await greeter.deployed();

    // Check that the contract's greet() method returns the expected greeting
    expect(await greeter.greet()).to.equal("Hello, world!");

    // call the setGreeting method
    const setGreetingTx = await greeter.setGreeting("Hola, mundo!");

    // wait until the transaction is mined
    await setGreetingTx.wait();

    // Check that the contract's greet() method returns the new greeting
    expect(await greeter.greet()).to.equal("Hola, mundo!");
  });
});

Затем выполните следующую команду в терминале, чтобы скомпилировать тестовые примеры.

 npx hardhat test

У нас должно получиться что-то похожее на то, что показано ниже.

Скомпилируйте и разверните смарт-контракт Greeter в сети Cosmos

Чтобы скомпилировать смарт-контракт, нам потребуется создать новый файл deploy.js в папке scripts и добавить в него следующий фрагмент кода.

const main = async () => {
  // Get the contract factory for the "Greeter" contract
  const greeterContractFactory = await hre.ethers.getContractFactory("Greeter");

  // Deploy the contract to the blockchain
  const greeterContract = await greeterContractFactory.deploy(
    "Hello, Hardhat!"
  );

  // Wait until the contract is deployed
  await greeterContract.deployed();

  // Log the address of the deployed contract
  console.log("Greeter Contract deployed to: ", greeterContract.address);
};

const runMain = async () => {
  try {
    // Call the main function
    await main();
    process.exit(0);
  } catch (error) {
    // Log any errors that occur
    console.log(error);
    process.exit(1);
  }
};

// Run the main function
runMain();

В приведенном выше фрагменте кода

  • Этот скрипт развертывает смарт-контракт с именем Greeter в блокчейне с помощью библиотеки hre.ethers.
  • Метод greeterContractFactory.deploy() развертывает новый экземпляр контракта в блокчейне.
  • Метод
  • await GreeterContract.deployed() используется для ожидания развертывания контракта.
  • Затем адрес развернутого контракта заносится в консоль, а затем функция runMain() представляет собой функцию-оболочку, которая запускает основную функцию и перехватывает любые возможные ошибки.

Затем создайте .env в корневом каталоге проекта для хранения закрытого ключа, который мы будем использовать в файле hardhat.config.js во время развертывания.

PRIVATE_KEY=

Перейдите к файлу hardhat.config.js и добавьте следующий фрагмент кода.

require("@nomicfoundation/hardhat-toolbox");
require("dotenv").config();

/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
  // Specify version of solidity compiler
  solidity: "0.8.17",

  // Define networks to be used for testing and deployment
  networks: {
    // Hardhat network is a built-in development network in Hardhat
    hardhat: {
    },
    // Local network is a network running on localhost
    local : {
      url: "http://localhost:8545",
    },
    // evmos network is a network hosted by evmos
    evmos: {
      url: "https://eth.bd.evmos.dev:8545",
      // Use the private key specified in the .env file
      accounts:[process.env.PRIVATE_KEY],
    },
  },
};

Это файл конфигурации для среды разработки Hardhat.

Мы развернем смарт-контракт на следующем этапе, но нам нужно убедиться, что мы финансируем наш кошелек с помощью тестового токена EVMOS (децентрализованного блокчейна с доказательством доли участия в экосистеме Cosmos). Настройте evmos на MetaMask и пополните кошелек с помощью этого evmos сайт крана.

После запроса сборщика у нас должно получиться что-то похожее на то, что показано ниже.

Теперь мы можем развернуть смарт-контракт в сети Cosmos с помощью следующей команды.

npx hardhat run --network evmos scripts/deploy.js

Проверка развертывания контракта в EVM Explorer

Посмотрим этот блок в EVM Explorer https://evm.evmos.dev

Чтобы продолжить, вы можете найти весь код для этого проекта здесь< /сильный>.

Заключение

В этой статье представлено руководство для начинающих по созданию и развертыванию смарт-контрактов в сети Cosmos. Используя среду разработки Hardhat, мы также продемонстрировали, как развернуть смарт-контракт в сети Cosmos.

Увидимся в моей следующей статье в блоге. Берегите!!!

:::информация Также опубликовано здесь. р>

:::


Оригинал