Как работает Smart Contract на примере MetaMask. Реальный опыт покупок и продаж на блокчейн
В одной из недавних статей я уже рассказывал о том, как работает Smart Contract. В этом пошаговом примере, мы разбавим сухую теорию незабываемой практикой.
Героем нашего сегодняшнего практического эксперимента послужит MetaMask - цифровой кошелек для Google Chrome. Для того, чтобы не тратить реальных Ethereum (ETH), мы воспользуемся функцией демонстрационного режима, изменив свойства сети на "Ropsten Test Network".
Создаем два аккаунта. 1-й для продавца, 2-й для покупателя.
Для каждой из этих учетных записей нам необходимо получить, как минимум 3 ETH, для выполнения транзакции. В этом нам поможет Ropsten MetaMask faucet.
Начнем наш тест с учетной записи продавца. Для этого переходим в данный аккаунт, у меня он называется "Account 3" и имеет на счете 74,712 ETH.
Переходим на страницу, где указываем стоимость товара. Мы указали цену: 2 ETH, которая является залогом того, что мы отправим товар покупателю (стоимость нашего товара - 1 ETH). По окончании продажи наши 2 ETH вернутся к нам обратно.
Нажимаем на кнопку "Select Image" для выбора изображения товара, который мы собираемся продавать. Откроется окно MetaMask, выбираем изображение, а затем подтверждаем ставку в 2 ETH. Жмем "CONFIRM" и подтверждаем наши действия.
Осталось дождаться выполнения транзакции в блокчейн, после чего мы увидим следующее:
- Contract (Контракт) - адрес, сгенерированный для нового смарт-контракта для продажи нашего товара. Скопируем этот адрес, позже он нам понадобится;
- Price (Цена) - 1 ETH - именно столько будет стоить наш товар;
- Seller (Продавец) - адрес кошелька продавца;
- Buyer (Покупатель) - все по нулям, так как мы еще не нашли покупателя;
- IPFS Hash - хэш изображения нашего товара в децентрализованной файловой системе IPFS. Сам смарт-контракт не хранит наше изображение.
Зеленая надпись "Created" говорит о том, что мы заключили смарт-контракт.
Давайте вновь взглянем на нашу учетную запись, а именно на наш баланс. 72,703 ETH - именно столько осталось на нашем балансе после заключения контракта. Мы знаем, что 2 ETH ушло в качестве залога, таким образом 74,712 ETH - 2 ETH - 72,703 ETH = 0,009 ETH (цена "топлива"; необходимая плата за запуск смарт-контракта).
Скопируем адрес кошелька аккаунта продавца "Account 3".
Переходим на страницу Etherscan и вставляем наш адрес в текстовое поле. Здесь мы можем наблюдать транзакции на нашем кошельке. Первая транзакция - та, которую мы только что выполнили. Нажимаем на TxHash.
Мы видим, что совсем недавно мы создали новый смарт-контракт, чтобы выставить товар на продажу. Жмем на адрес смарт-контракта.
Наблюдаем, что на смарт-контракте находится 2 ETH, те, которые мы на него отправили. Осталось дождаться, пока кто-нибудь купит наш товар.
Теперь перейдем в учетную запись покупателя. У меня она называется "Buyer" и имеет на счету 24,565 ETH.
Переходим на страницу покупки товара. В графу "Contract Address" вставляем адрес смарт-контракта и жмем "Get Contract".
Теперь мы можем приобрести товар. Мы видим, что цена равна 1 ETH, но смарт-контракт требует, чтобы мы внесли залог в размере еще 1 ETH, таким образом при покупке товара мы отправляем на смарт-контракт 2 ETH. По окончании покупки мы получим 1 ETH обратно. Жмем "Purchase" и приобретаем наш товар.
Далее появится окно кошелька MetaMask. Подтверждаем свои расходы.
Дожидаемся выполнения транзакции и переходим на Etherscan для анализа нашего смарт-контракта. Мы видим, что в данный момент на нем уже находится 4 ETH. Два от продавца и два от покупателя.
На экране покупки мы можем наблюдать надпись "Locked", что говорит о том, что товар заблокирован. На данном этапе ни покупатель, ни продавец не в силах отказаться от сделки. Таким образом, продавец видит, что на смарт-контракте 4 ETH и со спокойной душой отправляет свой товар.
Товар дошел до покупателя, он подтверждает это нажав "Deliver".
После чего подтверждает транзакцию в MetaMask, нажав "CONFIRM".
Теперь мы можем наблюдать надпись "Inactive" (Неактивно), что говорит о том, что смарт-контракт завершил свою работу.
Вновь обращаемся к Etherscan, чтобы проверить состояние смарт-контракта. Мы видим, что на его балансе 0 ETH.
Проверяем балансы кошельков MetaMask.
Мы видим, что на счету:
- продавца 75,703 ETH, что на 1 ETH больше, чем, когда он начал создавать смарт-контракт.
- покупателя 23,544 ETH, что на 1 ETH меньше, чем, когда он решил совершить покупку.
Таким образом, ETH, которые выступали в качестве залога вернулись к своим законным владельцам в полном объеме: 1 ETH - покупателю и 2 ETH - продавцу. На этом работа смарт-контракта завершена.
Преимущества использования смарт-контракта:
- нет необходимости в посреднике
- нет опасений, что какая-либо сторона выйдет из сделки с деньгами или товаром
- прозрачность, документированность транзакций благодаря блокчейн технологии
Если вам интересны статьи такого формата, подписывайтесь на канал и голосуйте за. Впереди нас ждет еще много всего интересного из мира криптовалют.
Также у нас есть свой Телеграмм-канал, мы будем очень счастливы, если вы к нам присоединитесь.