レッスン4

Контрактні взаємодії

У цьому заключному уроці ми розглянемо, як контракти взаємодіють один з одним. Ми також дізнаємося, як реалізувати журнал подій для моніторингу активності в блокчейні.

Взаємодія з контрактами

Перше поняття, яке ми розглянемо, це контрактна взаємодія. Контрактна взаємодія стосується того, як контракти обмінюються інформацією. У 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. Нарешті, ми дослідили, як контракти взаємодіють один з одним і як реєструвати події для відстеження дій у блокчейні.

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

免責事項
* 暗号資産投資には重大なリスクが伴います。注意して進めてください。このコースは投資アドバイスを目的としたものではありません。
※ このコースはGate Learnに参加しているメンバーが作成したものです。作成者が共有した意見はGate Learnを代表するものではありません。
カタログ
レッスン4

Контрактні взаємодії

У цьому заключному уроці ми розглянемо, як контракти взаємодіють один з одним. Ми також дізнаємося, як реалізувати журнал подій для моніторингу активності в блокчейні.

Взаємодія з контрактами

Перше поняття, яке ми розглянемо, це контрактна взаємодія. Контрактна взаємодія стосується того, як контракти обмінюються інформацією. У 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. Нарешті, ми дослідили, як контракти взаємодіють один з одним і як реєструвати події для відстеження дій у блокчейні.

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

免責事項
* 暗号資産投資には重大なリスクが伴います。注意して進めてください。このコースは投資アドバイスを目的としたものではありません。
※ このコースはGate Learnに参加しているメンバーが作成したものです。作成者が共有した意見はGate Learnを代表するものではありません。