Урок 4

Взаимодействие по контракту

В этом заключительном уроке мы рассмотрим, как контракты взаимодействуют друг с другом. Мы также узнаем, как реализовать регистрацию событий для мониторинга действий в блокчейне.

Взаимодействие с контрактами

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

Мы уже наблюдали взаимодействие контрактов в нашей системе голосования. Каждый раз, когда подается голос, контракт голосования взаимодействует сам с собой, чтобы обновить статус голосующего и подсчет голосов по данному предложению. Однако в более сложной системе у Вас могут быть отдельные контракты, которые должны взаимодействовать друг с другом.

Приведем простой пример взаимодействия контрактов:

Solidity
pragma solidity >=0.7.0 <0.9.0;

contract CalledContract {
 uint public x;

 function setX(uint _x) public {
        x = _x;
    }
}

contract CallerContract {
 function callSetX(address _calledContractAddress, uint _x) public {
        CalledContract calledContract = CalledContract(_calledContractAddress);
        calledContract.setX(_x);
    }
}

В этом примере CallerContract взаимодействует с CalledContract, вызывая его функцию setX.

Ведение журнала событий

Теперь давайте перейдем к регистрации событий. События - это способ для Вашего контракта сообщить о том, что во внешнем мире что-то произошло. В нашей системе голосования, например, мы можем захотеть выдавать событие каждый раз, когда подан голос. Вот как это сделать:

Solidity
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract Voter {
 // Определение события
 event VoteCast(address voter, uint proposal);

 // Остальная часть контракта...

 function vote(uint _proposal) public {
        Person storage sender = voters[msg.sender];
        require(!sender.voted, "Already voted.");
        sender.voted = true;
        sender.vote = _proposal;

        proposals[_proposal].voteCount += 1;

        // Emit event
        emit VoteCast(msg.sender, _proposal);
    }

    // Остальная часть контракта...
}

В обновленной функции голосования мы испускаем событие VoteCast каждый раз, когда подается голос. Событие регистрирует адрес избирателя и предложение, за которое он проголосовал.

В этом уроке мы познакомились с взаимодействием контрактов и регистрацией событий - двумя важнейшими концепциями в Solidity. Благодаря знаниям, полученным на этом курсе, Вы теперь готовы приступить к разработке более сложных децентрализованных приложений на Ethereum.

Заключение

Поздравляем! Вы успешно завершили курс "Построение децентрализованной системы голосования".

В ходе этого курса Вы узнали основные концепции децентрализованной системы голосования и научились реализовывать ее с помощью Solidity на Remix IDE. Начав с понимания того, что такое децентрализованное голосование и почему оно имеет значение, мы углубились в разработку собственных смарт-контрактов для регистрации избирателей, голосования и подсчета голосов. Мы также научились взаимодействовать с нашими контрактами и моделировать весь процесс голосования в IDE Remix. Наконец, мы изучили, как контракты взаимодействуют друг с другом и как регистрировать события для отслеживания действий в блокчейне.

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

Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.
Каталог
Урок 4

Взаимодействие по контракту

В этом заключительном уроке мы рассмотрим, как контракты взаимодействуют друг с другом. Мы также узнаем, как реализовать регистрацию событий для мониторинга действий в блокчейне.

Взаимодействие с контрактами

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

Мы уже наблюдали взаимодействие контрактов в нашей системе голосования. Каждый раз, когда подается голос, контракт голосования взаимодействует сам с собой, чтобы обновить статус голосующего и подсчет голосов по данному предложению. Однако в более сложной системе у Вас могут быть отдельные контракты, которые должны взаимодействовать друг с другом.

Приведем простой пример взаимодействия контрактов:

Solidity
pragma solidity >=0.7.0 <0.9.0;

contract CalledContract {
 uint public x;

 function setX(uint _x) public {
        x = _x;
    }
}

contract CallerContract {
 function callSetX(address _calledContractAddress, uint _x) public {
        CalledContract calledContract = CalledContract(_calledContractAddress);
        calledContract.setX(_x);
    }
}

В этом примере CallerContract взаимодействует с CalledContract, вызывая его функцию setX.

Ведение журнала событий

Теперь давайте перейдем к регистрации событий. События - это способ для Вашего контракта сообщить о том, что во внешнем мире что-то произошло. В нашей системе голосования, например, мы можем захотеть выдавать событие каждый раз, когда подан голос. Вот как это сделать:

Solidity
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract Voter {
 // Определение события
 event VoteCast(address voter, uint proposal);

 // Остальная часть контракта...

 function vote(uint _proposal) public {
        Person storage sender = voters[msg.sender];
        require(!sender.voted, "Already voted.");
        sender.voted = true;
        sender.vote = _proposal;

        proposals[_proposal].voteCount += 1;

        // Emit event
        emit VoteCast(msg.sender, _proposal);
    }

    // Остальная часть контракта...
}

В обновленной функции голосования мы испускаем событие VoteCast каждый раз, когда подается голос. Событие регистрирует адрес избирателя и предложение, за которое он проголосовал.

В этом уроке мы познакомились с взаимодействием контрактов и регистрацией событий - двумя важнейшими концепциями в Solidity. Благодаря знаниям, полученным на этом курсе, Вы теперь готовы приступить к разработке более сложных децентрализованных приложений на Ethereum.

Заключение

Поздравляем! Вы успешно завершили курс "Построение децентрализованной системы голосования".

В ходе этого курса Вы узнали основные концепции децентрализованной системы голосования и научились реализовывать ее с помощью Solidity на Remix IDE. Начав с понимания того, что такое децентрализованное голосование и почему оно имеет значение, мы углубились в разработку собственных смарт-контрактов для регистрации избирателей, голосования и подсчета голосов. Мы также научились взаимодействовать с нашими контрактами и моделировать весь процесс голосования в IDE Remix. Наконец, мы изучили, как контракты взаимодействуют друг с другом и как регистрировать события для отслеживания действий в блокчейне.

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

Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.
It seems that you are attempting to access our services from a Restricted Location where Gate is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.