Перше поняття, яке ми розглянемо, це контрактна взаємодія. Контрактна взаємодія стосується того, як контракти обмінюються інформацією. У Solidity контракти можуть викликати функції інших контрактів, створювати інші контракти та навіть надсилати Ether на інші контракти чи адреси.
Ми вже бачили договірну взаємодію в нашій системі голосування. Щоразу, коли відбувається голосування, договір про голосування взаємодіє сам із собою, щоб оновити статус голосуючого та підрахунок голосів за пропозицію. Однак для більш складної системи ви можете мати окремі контракти, які повинні взаємодіяти один з одним.
Ось простий приклад контрактної взаємодії:
Solidity
pragma solidity >=0,7.0 <0,9.0;
контракт CalledContract {
uint public x;
функція 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;
контракт Voter {
// Визначення події
event VoteCast(адреса голосуючого, uint пропозиції);
// Решта контракту...
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);
}
// Решта контракту...
}
В оновленій функції vote
ми запускаємо подію VoteCast
кожного разу, коли голосується. Подія реєструє адресу виборця та пропозицію, за яку він проголосував.
На цьому уроці ми дізналися про взаємодію контрактів і ведення журналів подій, дві основні концепції в Solidity. Завдяки знанням, які ви отримали під час цього курсу, ви тепер готові розпочати розробку складніших децентралізованих програм на Ethereum.
Щиро вітаю! Ви успішно пройшли курс «Створення децентралізованої системи голосування».
Протягом цього курсу ви дізналися про основні концепції децентралізованої системи голосування та про те, як її реалізувати за допомогою Solidity в Remix IDE. Починаючи з розуміння того, що таке децентралізоване голосування та чому воно важливо, ми заглибились у кодування власних розумних контрактів для реєстрації виборців, голосування та підрахунку голосів. Ми також навчилися взаємодіяти з нашими контрактами та симулювати весь процес голосування в Remix IDE. Нарешті, ми дослідили, як контракти взаємодіють один з одним і як реєструвати події для відстеження дій у блокчейні.
Навички та знання, які ви отримали під час цього курсу, не обмежуються лише створенням систем голосування, але також можуть бути застосовані до інших типів децентралізованих програм. Продовжуйте практикуватися, експериментувати та будувати.
Перше поняття, яке ми розглянемо, це контрактна взаємодія. Контрактна взаємодія стосується того, як контракти обмінюються інформацією. У Solidity контракти можуть викликати функції інших контрактів, створювати інші контракти та навіть надсилати Ether на інші контракти чи адреси.
Ми вже бачили договірну взаємодію в нашій системі голосування. Щоразу, коли відбувається голосування, договір про голосування взаємодіє сам із собою, щоб оновити статус голосуючого та підрахунок голосів за пропозицію. Однак для більш складної системи ви можете мати окремі контракти, які повинні взаємодіяти один з одним.
Ось простий приклад контрактної взаємодії:
Solidity
pragma solidity >=0,7.0 <0,9.0;
контракт CalledContract {
uint public x;
функція 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;
контракт Voter {
// Визначення події
event VoteCast(адреса голосуючого, uint пропозиції);
// Решта контракту...
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);
}
// Решта контракту...
}
В оновленій функції vote
ми запускаємо подію VoteCast
кожного разу, коли голосується. Подія реєструє адресу виборця та пропозицію, за яку він проголосував.
На цьому уроці ми дізналися про взаємодію контрактів і ведення журналів подій, дві основні концепції в Solidity. Завдяки знанням, які ви отримали під час цього курсу, ви тепер готові розпочати розробку складніших децентралізованих програм на Ethereum.
Щиро вітаю! Ви успішно пройшли курс «Створення децентралізованої системи голосування».
Протягом цього курсу ви дізналися про основні концепції децентралізованої системи голосування та про те, як її реалізувати за допомогою Solidity в Remix IDE. Починаючи з розуміння того, що таке децентралізоване голосування та чому воно важливо, ми заглибились у кодування власних розумних контрактів для реєстрації виборців, голосування та підрахунку голосів. Ми також навчилися взаємодіяти з нашими контрактами та симулювати весь процес голосування в Remix IDE. Нарешті, ми дослідили, як контракти взаємодіють один з одним і як реєструвати події для відстеження дій у блокчейні.
Навички та знання, які ви отримали під час цього курсу, не обмежуються лише створенням систем голосування, але також можуть бути застосовані до інших типів децентралізованих програм. Продовжуйте практикуватися, експериментувати та будувати.