Первое понятие, которое мы рассмотрим, - это взаимодействие по контракту. Взаимодействие контрактов относится к тому, как контракты общаются и обмениваются информацией. В 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. Наконец, мы изучили, как контракты взаимодействуют друг с другом и как регистрировать события для отслеживания действий в блокчейне.
Навыки и знания, полученные Вами на этом курсе, не ограничиваются только созданием систем голосования, но могут быть применены и к другим типам децентрализованных приложений. Продолжайте практиковаться, экспериментировать и строить.
Первое понятие, которое мы рассмотрим, - это взаимодействие по контракту. Взаимодействие контрактов относится к тому, как контракты общаются и обмениваются информацией. В 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. Наконец, мы изучили, как контракты взаимодействуют друг с другом и как регистрировать события для отслеживания действий в блокчейне.
Навыки и знания, полученные Вами на этом курсе, не ограничиваются только созданием систем голосования, но могут быть применены и к другим типам децентрализованных приложений. Продолжайте практиковаться, экспериментировать и строить.