Lección 4

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

Смарт-контракты могут взаимодействовать с другими контрактами на блокчейне Ethereum, позволяя вызовы функций, чтение переменных и передачу Ether или токенов.

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

Смарт-контракты могут взаимодействовать с другими контрактами на блокчейне Ethereum, позволяя им вызывать функции, читать переменные и отправлять Ether или токены. Один из способов облегчить это взаимодействие - использовать Web3j, легковесную библиотеку Java для работы с Ethereum. Web3j может автоматически генерировать обертку кода смарт-контракта, обеспечивая безшовное развертывание и взаимодействие со смарт-контрактами из JVM.

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

События и журналы

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

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

Пример: Развертывание смарт-контракта с помощью Remix и MetaMask

Шаг 1: Откройте Remix IDE
Сначала откройте Remix IDE ( https://remix.ethereum.org/) в вашем веб-браузере.

Шаг 2: Создать новый файл
Нажмите на кнопку "+" в верхнем левом углу IDE, чтобы создать новое пустое рабочее пространство. Затем нажмите на страницу "Новый файл", чтобы создать новый файл

Назовите файл "Auction.sol".

Шаг 3: Определите контракт
Скопируйте и вставьте следующий код в новый файл “Auction.sol”:

TypeScript// SPDX-License-Identifier: MIT// Указываем Solidity versionpragma solidity ^0.8.0;// Определяем аукцион contractcontract Auction { // Объявляем переменные состояния address payable public owner; // Владелец контракта (может отменить аукцион) uint public startBlock; // Номер блока, с которого начинается аукцион uint public endBlock; // Номер блока, на котором заканчивается аукцион string public ipfsHash; // IPFS хеш для выставляемого на аукцион лота bool public canceled;  Был ли аукцион отменен bool public ended; Завершился ли аукцион uint public highestBid; Самая высокая ставка на данный момент адресована payable public highestBidder; Адрес участника, предложившего наивысшую цену // Объявляем события события AuctionCanceled(); Событие, генерируемое при отмене аукциона event HighestBidIncrease(address bidder, uint amount); Событие, генерируемое при установлении новой самой высокой ставки event AuctionEnded(address winner, uint amount); Событие генерируется при окончании аукциона // Объявляем отображение mapping(address => uint256) публичных балансов;    Constructor function constructor() { owner = payable(msg.sender); // Устанавливаем владельца на адрес, по которому разворачивается контракт startBlock = block.number; // Устанавливаем начальный блок на номер текущего блока endBlock = startBlock + 40320; // Устанавливаем конечный блок на 1 неделю (40320 блоков) после стартового блока ipfsHash = ""; Инициализируем хеш IPFS пустой строкой } // Функция для размещения ставки function placeBid() public payable { require(block.number >= startBlock && block.number <= endBlock, "Аукцион не активен."); // Проверяем, что аукцион активен require(msg.value > highestBid, "Уже есть более высокая ставка."); // Проверяем, что новая ставка выше, чем текущая самая высокая ставка require(!canceled, "Аукцион отменен."); // Проверяем, что аукцион не был отменен        Если в прошлом был участник с самой высокой ценой, добавьте сумму его ставки к его балансу if (highestBidder != address(0)) { balances[highestBidder] += highestBid;    } // Устанавливаем новую самую высокую ставку и участника торгов highestBid = msg.value;        highestBidder = payable(msg.sender);        Выдача события, сигнализирующего о том, что установлена новая самая высокая ставка emit HighestBidIncrease(msg.sender, msg.value);    } // Функция отмены аукциона function cancelAuction() public { require(msg.sender == owner, "Отменить аукцион может только владелец."); // Проверяем, что отправитель является владельцем require(!ended, "Аукцион уже закончился."); // Проверяем, что аукцион еще не закончился // Устанавливаем флаг canceled и генерируем событие, сигнализирующее об отмене аукциона canceled = true;        emit AuctionCanceled();    } // Функция завершения аукциона function endAuction() public { require(block.number > endBlock, "Аукцион еще не окончен."); // Проверяем, что аукцион окончен require(!canceled, "Аукцион отменен."); // Проверяем, что аукцион не отменен require(!ended, "Аукцион уже закончился."); // Проверяем, что аукцион еще не закончился // Устанавливаем флаг завершения и генерируем событие, сигнализирующее о том, что аукцион закончился ended ended = true;        emit AuctionEnded(highestBidder, highestBid);        Передать владельцу наибольшую сумму ставки owner.transfer(highestBid);        Если в прошлом был участник с самой высокой ценой, добавьте сумму его ставки к его балансу if (highestBidder != address(0)) { balances[highestBidder] += highestBid;        } } // Функция для установки IPFS хэша для предмета, выставляемого на аукцион function setIpfsHash(string memory hash) public { require(msg.sender == owner, "Только владелец может установить IPFS хэш."); // Проверяем, что отправитель является владельцем ipfsHash = hash; // Устанавливаем IPFS хэш в указанное значение }}

Этот код определяет AUCTIONконтракт, который позволяет пользователям делать ставки на товар и завершает аукцион после определенного периода. Контракт также имеет функцию отмены аукциона и функцию установки хэша IPFS для продаваемого товара.

Шаг 4: Составьте договор

Нажмите на вкладку «Компилятор Solidity» в левом меню. Под «Скомпилировать Auction.sol» нажмите кнопку «Компилировать». Контракт должен быть успешно скомпилирован, и вы должны увидеть зеленую галочку рядом с «Auction.sol» в файловом менеджере.

Шаг 5: Разверните контракт

Нажмите на вкладку "Развернуть и выполнить транзакции" в левом меню. В разделе "Среда" выберите "Внедренный Web3" в качестве среды. В разделе "Контракт" выберите "Аукцион" в качестве контракта для развертывания. Нажмите кнопку "Развернуть".

Шаг 6: Взаимодействуйте с договором
После развертывания контракта вы можете взаимодействовать с ним, используя различные функции, определенные в контракте. Например, вы можете вызвать placeBid()функция размещения ставки на товар

Используя Remix и MetaMask, вы можете легко развертывать и взаимодействовать с смарт-контрактами в сети Ethereum, обеспечивая разработку и тестирование децентрализованных приложений в удобной для пользователя среде.

Основные моменты
Смарт-контракты могут взаимодействовать с другими контрактами в блокчейне Ethereum, обеспечивая вызовы функций, чтение переменных и передачу эфира или токенов.
Web3j - это легкая библиотека Java, которая облегчает взаимодействие с Ethereum. Она может автоматически генерировать код оболочки смарт-контракта для безпроблемного развертывания и взаимодействия с контрактами с JVM.
События необходимы для отслеживания и мониторинга активности контракта на блокчейне. Они выдают журналы, которые могут быть сохранены и извлечены внецепных системами, обеспечивая обновления в реальном времени для dApps.
Журналы, которые представляют собой записи, излучаемые событиями, играют решающую роль в эффективной коммуникации между смарт-контрактами и внебиржевыми системами. Они проиндексированы, что позволяет легко фильтровать и искать конкретные события или точки данных.
Предоставленный пример демонстрирует процесс развертывания смарт-контракта с использованием среды Remix IDE и MetaMask. Он включает такие шаги, как создание нового файла, определение контракта, его компиляция, развертывание и взаимодействие с его функциями.

Descargo de responsabilidad
* La inversión en criptomonedas implica riesgos significativos. Proceda con precaución. El curso no pretende ser un asesoramiento de inversión.
* El curso ha sido creado por el autor que se ha unido a Gate Learn. Cualquier opinión compartida por el autor no representa a Gate Learn.
Catálogo
Lección 4

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

Смарт-контракты могут взаимодействовать с другими контрактами на блокчейне Ethereum, позволяя вызовы функций, чтение переменных и передачу Ether или токенов.

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

Смарт-контракты могут взаимодействовать с другими контрактами на блокчейне Ethereum, позволяя им вызывать функции, читать переменные и отправлять Ether или токены. Один из способов облегчить это взаимодействие - использовать Web3j, легковесную библиотеку Java для работы с Ethereum. Web3j может автоматически генерировать обертку кода смарт-контракта, обеспечивая безшовное развертывание и взаимодействие со смарт-контрактами из JVM.

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

События и журналы

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

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

Пример: Развертывание смарт-контракта с помощью Remix и MetaMask

Шаг 1: Откройте Remix IDE
Сначала откройте Remix IDE ( https://remix.ethereum.org/) в вашем веб-браузере.

Шаг 2: Создать новый файл
Нажмите на кнопку "+" в верхнем левом углу IDE, чтобы создать новое пустое рабочее пространство. Затем нажмите на страницу "Новый файл", чтобы создать новый файл

Назовите файл "Auction.sol".

Шаг 3: Определите контракт
Скопируйте и вставьте следующий код в новый файл “Auction.sol”:

TypeScript// SPDX-License-Identifier: MIT// Указываем Solidity versionpragma solidity ^0.8.0;// Определяем аукцион contractcontract Auction { // Объявляем переменные состояния address payable public owner; // Владелец контракта (может отменить аукцион) uint public startBlock; // Номер блока, с которого начинается аукцион uint public endBlock; // Номер блока, на котором заканчивается аукцион string public ipfsHash; // IPFS хеш для выставляемого на аукцион лота bool public canceled;  Был ли аукцион отменен bool public ended; Завершился ли аукцион uint public highestBid; Самая высокая ставка на данный момент адресована payable public highestBidder; Адрес участника, предложившего наивысшую цену // Объявляем события события AuctionCanceled(); Событие, генерируемое при отмене аукциона event HighestBidIncrease(address bidder, uint amount); Событие, генерируемое при установлении новой самой высокой ставки event AuctionEnded(address winner, uint amount); Событие генерируется при окончании аукциона // Объявляем отображение mapping(address => uint256) публичных балансов;    Constructor function constructor() { owner = payable(msg.sender); // Устанавливаем владельца на адрес, по которому разворачивается контракт startBlock = block.number; // Устанавливаем начальный блок на номер текущего блока endBlock = startBlock + 40320; // Устанавливаем конечный блок на 1 неделю (40320 блоков) после стартового блока ipfsHash = ""; Инициализируем хеш IPFS пустой строкой } // Функция для размещения ставки function placeBid() public payable { require(block.number >= startBlock && block.number <= endBlock, "Аукцион не активен."); // Проверяем, что аукцион активен require(msg.value > highestBid, "Уже есть более высокая ставка."); // Проверяем, что новая ставка выше, чем текущая самая высокая ставка require(!canceled, "Аукцион отменен."); // Проверяем, что аукцион не был отменен        Если в прошлом был участник с самой высокой ценой, добавьте сумму его ставки к его балансу if (highestBidder != address(0)) { balances[highestBidder] += highestBid;    } // Устанавливаем новую самую высокую ставку и участника торгов highestBid = msg.value;        highestBidder = payable(msg.sender);        Выдача события, сигнализирующего о том, что установлена новая самая высокая ставка emit HighestBidIncrease(msg.sender, msg.value);    } // Функция отмены аукциона function cancelAuction() public { require(msg.sender == owner, "Отменить аукцион может только владелец."); // Проверяем, что отправитель является владельцем require(!ended, "Аукцион уже закончился."); // Проверяем, что аукцион еще не закончился // Устанавливаем флаг canceled и генерируем событие, сигнализирующее об отмене аукциона canceled = true;        emit AuctionCanceled();    } // Функция завершения аукциона function endAuction() public { require(block.number > endBlock, "Аукцион еще не окончен."); // Проверяем, что аукцион окончен require(!canceled, "Аукцион отменен."); // Проверяем, что аукцион не отменен require(!ended, "Аукцион уже закончился."); // Проверяем, что аукцион еще не закончился // Устанавливаем флаг завершения и генерируем событие, сигнализирующее о том, что аукцион закончился ended ended = true;        emit AuctionEnded(highestBidder, highestBid);        Передать владельцу наибольшую сумму ставки owner.transfer(highestBid);        Если в прошлом был участник с самой высокой ценой, добавьте сумму его ставки к его балансу if (highestBidder != address(0)) { balances[highestBidder] += highestBid;        } } // Функция для установки IPFS хэша для предмета, выставляемого на аукцион function setIpfsHash(string memory hash) public { require(msg.sender == owner, "Только владелец может установить IPFS хэш."); // Проверяем, что отправитель является владельцем ipfsHash = hash; // Устанавливаем IPFS хэш в указанное значение }}

Этот код определяет AUCTIONконтракт, который позволяет пользователям делать ставки на товар и завершает аукцион после определенного периода. Контракт также имеет функцию отмены аукциона и функцию установки хэша IPFS для продаваемого товара.

Шаг 4: Составьте договор

Нажмите на вкладку «Компилятор Solidity» в левом меню. Под «Скомпилировать Auction.sol» нажмите кнопку «Компилировать». Контракт должен быть успешно скомпилирован, и вы должны увидеть зеленую галочку рядом с «Auction.sol» в файловом менеджере.

Шаг 5: Разверните контракт

Нажмите на вкладку "Развернуть и выполнить транзакции" в левом меню. В разделе "Среда" выберите "Внедренный Web3" в качестве среды. В разделе "Контракт" выберите "Аукцион" в качестве контракта для развертывания. Нажмите кнопку "Развернуть".

Шаг 6: Взаимодействуйте с договором
После развертывания контракта вы можете взаимодействовать с ним, используя различные функции, определенные в контракте. Например, вы можете вызвать placeBid()функция размещения ставки на товар

Используя Remix и MetaMask, вы можете легко развертывать и взаимодействовать с смарт-контрактами в сети Ethereum, обеспечивая разработку и тестирование децентрализованных приложений в удобной для пользователя среде.

Основные моменты
Смарт-контракты могут взаимодействовать с другими контрактами в блокчейне Ethereum, обеспечивая вызовы функций, чтение переменных и передачу эфира или токенов.
Web3j - это легкая библиотека Java, которая облегчает взаимодействие с Ethereum. Она может автоматически генерировать код оболочки смарт-контракта для безпроблемного развертывания и взаимодействия с контрактами с JVM.
События необходимы для отслеживания и мониторинга активности контракта на блокчейне. Они выдают журналы, которые могут быть сохранены и извлечены внецепных системами, обеспечивая обновления в реальном времени для dApps.
Журналы, которые представляют собой записи, излучаемые событиями, играют решающую роль в эффективной коммуникации между смарт-контрактами и внебиржевыми системами. Они проиндексированы, что позволяет легко фильтровать и искать конкретные события или точки данных.
Предоставленный пример демонстрирует процесс развертывания смарт-контракта с использованием среды Remix IDE и MetaMask. Он включает такие шаги, как создание нового файла, определение контракта, его компиляция, развертывание и взаимодействие с его функциями.

Descargo de responsabilidad
* La inversión en criptomonedas implica riesgos significativos. Proceda con precaución. El curso no pretende ser un asesoramiento de inversión.
* El curso ha sido creado por el autor que se ha unido a Gate Learn. Cualquier opinión compartida por el autor no representa a Gate Learn.
It seems that you are attempting to access our services from a Restricted Location where Gate.io 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.