<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <language>ru</language>
    <title>смарт-контракты</title>
    <description/>
    <link>https://tproger.ru/tag/smart-kontrakty</link>
    <atom:link href="https://tproger.ru/tag/smart-kontrakty/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Fri, 25 Sep 2026 06:33:16 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>смарт-контракты</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>ASPA — как новый стандарт проверяет путь интернет-трафика и защищает от утечек маршрутов</title>
      <link>https://tproger.ru/translations/aspa---kak-novyj-standart-proveryaet-put-internet-trafika-i-zashhi</link>
      <comments>https://tproger.ru/translations/aspa---kak-novyj-standart-proveryaet-put-internet-trafika-i-zashhi?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/translations/aspa---kak-novyj-standart-proveryaet-put-internet-trafika-i-zashhi</guid>
      <description><![CDATA[<p>Как ASPA дополняет RPKI/ROA, проверяя не только пункт назначения, но и весь путь трафика. Перевод статьи Cloudflare о новом стандарте безопасности BGP.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/translations/aspa---kak-novyj-standart-proveryaet-put-internet-trafika-i-zashhi">ASPA — как новый стандарт проверяет путь интернет-трафика и защищает от утечек маршрутов</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Лучшая практика]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[смарт-контракты]]></category>
      <category><![CDATA[Переводы]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 02 Apr 2026 12:37:12 GMT</pubDate>
      <content:encoded><![CDATA[<p>Это перевод с адаптацией <a href="https://blog.cloudflare.com/aspa-secure-internet/">статьи</a> Mingwei Zhang и Bryton Herdes из блога <a href="https://blog.cloudflare.com/">Cloudflare</a>.</p><p>BGP (Border Gateway Protocol) — протокол, по которому автономные системы (AS) обмениваются информацией о маршрутах. Автономная система — это сеть под управлением одного оператора: провайдера, облачной платформы, крупной компании. Когда вы открываете сайт, трафик проходит через цепочку таких AS. Но иногда он уходит не туда — из-за ошибок конфигурации или злонамеренных действий. Такие инциденты называются утечками маршрутов (route leaks). Новый криптографический стандарт ASPA (Autonomous System Provider Authorization) призван решить эту проблему — он проверяет не только пункт назначения, но и весь путь трафика.</p><ul><li>ASPA — новый стандарт криптографической проверки маршрутов BGP, дополняющий существующий RPKI/ROA</li><li>ROA проверяет пункт назначения трафика, ASPA проверяет путь — цепочку сетей, через которые он проходит</li><li>ASPA обнаруживает утечки маршрутов, проверяя, что трафик движется по «горной» модели: вверх к провайдеру, через пиринг, вниз к получателю</li><li>Создать ASPA-запись можно за пару кликов в RIPE или ARIN</li><li>Cloudflare Radar теперь отслеживает глобальное внедрение ASPA в реальном времени</li></ul><h2>Как сейчас защищён BGP: RPKI и ROA</h2><p>Сегодня сети используют инфраструктуру <a href="https://blog.cloudflare.com/rpki/">RPKI</a> (Resource Public Key Infrastructure), внедрение которой значительно выросло за последние годы. В рамках RPKI сети публикуют криптографические записи — ROA (Route Origin Authorizations). ROA — это верифицируемое цифровое удостоверение, подтверждающее, что конкретная автономная система (AS) авторизована анонсировать определённые IP-адреса. Это решает проблему origin hijacks — когда одна сеть выдаёт себя за другую.</p><p>Но ROA проверяет только пункт назначения. А что насчёт пути?</p><h2>Что такое ASPA и как он работает</h2><p>ASPA (Autonomous System Provider Authorization) надстраивается над RPKI. Если ROA проверяет <b>куда</b> идёт трафик, то ASPA проверяет <b>как</b> он туда добирается.</p><p>Когда данные путешествуют по интернету, каждая сеть на пути записывается в лог — AS_PATH. ASPA позволяет сетям официально публиковать список авторизованных апстрим-провайдеров в системе RPKI. Любая принимающая сеть может посмотреть на AS_PATH, проверить ASPA-записи и убедиться, что трафик прошёл только через одобренную цепочку сетей.</p><h3>Модель «горы»: как устроена здоровая маршрутизация</h3><p>В нормальной топологии (valley-free routing) трафик движется по «горной» модели:</p><ol><li><b>Подъём (Up-Ramp)</b> — трафик идёт от клиента вверх через всё более крупных провайдеров (ISP)</li><li><b>Вершина (Apex)</b> — на уровне магистрали трафик может пересечь один пиринговый линк</li><li><b>Спуск (Down-Ramp)</b> — трафик спускается через провайдеров к получателю</li></ol><p>Один из типов утечки — «долина» в этой модели. Она происходит, когда трафик спускается к клиенту и неожиданно пытается снова подняться к другому провайдеру. Клиентские сети не предназначены для транзита трафика между крупными провайдерами.</p><h3>Как ASPA валидирует маршруты</h3><p>ASPA проверяет цепочку отношений с обоих концов маршрута:</p><ol><li><b>Проверка подъёма</b> — начинаем от источника и двигаемся вперёд. На каждом хопе спрашиваем: «Авторизовала ли эта сеть следующую как своего провайдера?»</li><li><b>Проверка спуска</b> — то же самое, но в обратном направлении от получателя BGP-обновления</li></ol><p>Если «подъём» и «спуск» встречаются или пересекаются на вершине — маршрут <b>валидный</b>. Форма горы сохранена.</p><p>Если пути не сходятся и в середине есть разрыв — ASPA отмечает маршрут как проблемный. Этот разрыв и есть «долина», то есть утечка.</p><h3>Пример: обнаружение утечки маршрута</h3><p>Допустим, сеть AS65539 получает подозрительный маршрут от клиента AS65538. Клиент пытается отправить трафик, полученный от одного провайдера (AS65537), «вверх» к другому провайдеру (AS65539) — действуя как мост между провайдерами. Это классическая утечка маршрута.</p><p>Процесс валидации ASPA:</p><ol><li>Проверяем подъём: источник (AS65536) авторизует своего провайдера — проверка пройдена</li><li>Проверяем спуск: начинаем от получателя и смотрим назад — видим клиента (AS65538)</li><li>Несовпадение: подъём заканчивается на AS65537, спуск — на AS65538. Пути не соединяются</li></ol><p>Результат: маршрут отмечен как <b>ASPA Invalid</b>. Без подписанных ASPA-объектов в RPKI невозможно определить, какие сети авторизованы анонсировать префиксы горизонтально (пирам) или вверх (провайдерам).</p><h2>ASPA против forged-origin hijacks</h2><p>ASPA эффективно защищает от forged-origin hijacks — атак, при которых злоумышленник обходит проверку ROV: он анонсирует реальный IP-префикс с правильным origin AS, но вставляет себя в AS_PATH как промежуточный хоп. ROV это не замечает, так как проверяет только origin. Источник формально правильный, но связь между атакующим и жертвой — сфабрикована.</p><p>ASPA разоблачает это: сеть-жертва криптографически объявляет своих реальных провайдеров, и поскольку атакующий не входит в этот список, маршрут отклоняется.</p><p><b>Ограничение:</b> ASPA не защищает от всех случаев. Провайдер может подделать пиринговый линк с другой AS, чтобы привлечь трафик клиента коротким AS_PATH, даже если такого пирингового линка в реальности не существует. ASPA работает только с информацией о провайдерах и ничего не знает о пиринговых отношениях.</p><h2>Как создать ASPA-запись: пара кликов</h2><p>Создание ASPA-объекта для вашей сети стало простым в реестрах <a href="https://www.ripe.net/">RIPE</a> и <a href="https://www.arin.net/">ARIN</a>. Всё, что нужно — ваш номер AS и номера AS ваших провайдеров, у которых вы покупаете транзит. В обратном направлении это сети, которым вы разрешаете присылать полную таблицу маршрутизации — карту достижимости остального интернета.</p><p>Пример Cloudflare: для AS203898 (офис в Лондоне) с тремя интернет-провайдерами (AS8220, AS2860, AS1273) процесс занимает три шага:</p><ol><li>Войти в RPKI-дашборд RIPE и перейти в раздел ASPA</li><li>Нажать «Create ASPA» для нужного AS</li><li>Указать список провайдеров</li></ol><p>Через короткое время ASPA-запись появляется в глобальной RPKI-экосистеме.</p><p>Отдельный случай — запись с <b>AS0</b> в качестве провайдера. Это означает, что у сети нет апстрим-провайдеров. По определению, каждая транзитно-свободная сеть Tier-1 в будущем должна будет подписать ASPA только с «AS0» — если у неё действительно только пиринговые и клиентские отношения.</p><h2>Мониторинг ASPA в Cloudflare Radar</h2><p><a href="https://radar.cloudflare.com/">Cloudflare Radar</a> добавил новые возможности мониторинга внедрения ASPA:</p><ul><li>Графики роста внедрения ASPA по пяти региональным реестрам (RIR)</li><li>Интеграция ASPA-данных в страницы маршрутизации по странам и ASN</li><li>Для каждой AS — список провайдеров из ASPA-объекта, проверка BGP-апстримов и история изменений</li></ul><h2>Что нужно для полного внедрения ASPA</h2><p>ASPA — это криптографический фундамент для валидации путей. Но, как показал опыт RPKI/ROA, внедрение займёт время. Необходимы обновления:</p><ul><li>RPKI Relying Party (RP) — программы проверки криптографических записей</li><li>RTR (RPKI-to-Router protocol) — протокол передачи данных маршрутизаторам</li><li>BGP-реализации на маршрутизаторах — для валидации путей с использованием ASPA</li></ul><p>Помимо создания ASPA-записей, операторам рекомендуется настроить <b>BGP roles</b> (<a href="https://www.rfc-editor.org/rfc/rfc9234">RFC 9234</a>). BGP roles привязывают предполагаемые отношения между AS к конкретным BGP-сессиям, помогая ASPA определить, какой алгоритм валидации применять — для апстрима или даунстрима. Уточните у своих вендоров оборудования, поддерживают ли они BGP roles и атрибут OTC (Only-to-Customer).</p><blockquote>Управление ASPA-записями не отличается от управления ROA. В будущем, когда сети начнут активно блокировать невалидные пути, пропуск легитимного провайдера может привести к потере трафика. Но это тот же риск, который операторы уже научились контролировать.</blockquote><h2>Выводы</h2><p>ASPA — следующий логичный шаг в безопасности интернет-маршрутизации после RPKI/ROA. Если ROA закрепил за каждой AS право анонсировать свои IP-адреса, то ASPA закрепляет право на транзит — описывает авторизованный путь трафика.</p><p>Для операторов сетей: <a href="https://radar.cloudflare.com/">проверьте в Cloudflare Radar</a>, есть ли у вашей AS ASPA-запись, и создайте её в RIPE или ARIN. Чем больше сетей подпишут ASPA, тем быстрее стандарт начнёт реально блокировать утечки маршрутов.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как Web3 меняет разработку веб-приложений: от серверов к блокчейну</title>
      <link>https://tproger.ru/articles/kak-web3-menyaet-razrabotku-veb-prilozhenij--ot-serverov-k-blokchejnu</link>
      <comments>https://tproger.ru/articles/kak-web3-menyaet-razrabotku-veb-prilozhenij--ot-serverov-k-blokchejnu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Диана Тажетдинова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-web3-menyaet-razrabotku-veb-prilozhenij--ot-serverov-k-blokchejnu</guid>
      <description><![CDATA[<p>Поговорили с экспертом и узнали, где Web3 даёт практическую пользу разработчикам: сравниваем подходы, исследуем рынок вакансий и особенности новой реальности.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-web3-menyaet-razrabotku-veb-prilozhenij--ot-serverov-k-blokchejnu">Как Web3 меняет разработку веб-приложений: от серверов к блокчейну</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Блокчейн]]></category>
      <category><![CDATA[Ethereum]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[смарт-контракты]]></category>
      <category><![CDATA[DeFi]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 22 Sep 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Раньше, чтобы запустить приложение, приходилось настраивать сервер и базу данных. В Web3 всё по-другому: вместо серверов — смарт-контракты, вместо базы — блокчейн. <a href="https://www.esparkinfo.com/web3/statistics">По прогнозам</a>, объём рынка Web3‑разработки вырастет с $4,43 млрд в 2024 году до $6,15 млрд в 2025. Кейсы<a href="https://ru.wikipedia.org/wiki/Plume_Network_%E2%80%93_The_Future_of_Real-World_Assets_on_Web3_%F0%9F%8C%90?utm_source=chatgpt.com"> Plume Network</a> и<a href="https://en.wikipedia.org/wiki/The_Graph?utm_source=chatgpt.com"> The Graph</a> показывают, что Web3 уже работает в реальных продуктах. Что, если нас уже сегодня ждет backend в виде блокчейна? Давайте разберём, как меняются инструменты, архитектуры и карьерные треки.</p><h2>Главные отличия Web3 от Web2</h2><p>Перед тем как углубиться в код и практику, полезно увидеть основные различия между привычной Web2-разработкой и новой логикой Web3.</p><figure><img src="https://media.tproger.ru/user-uploads/114509/2025-09-22/3fa1cc2a-0755-4b71-af24-9b8a6f9d22ea.png" alt="" /></figure><p>Представим себе простой сервис для задач. В классическом Web2 его работа привычна: сервер обрабатывает запросы, база данных хранит задачи, а пользователь авторизуется через почту и пароль. Всё централизовано и зависит от владельца сервера.</p><p>В Web3 логика сильно меняется. Пользователь входит в систему с помощью криптокошелька, например, MetaMask. Каждая задача создаётся транзакцией и записывается в смарт‑контракт, а значит становится частью блокчейна. Удалить её уже нельзя — только отметить статус выполнения. Такой подход даёт прозрачность: любой участник сети может проверить, что задача действительно существует, и её статус изменён честно.</p><h2>Стек Web3: что понадобится на практике</h2><p>Чтобы построить работающий DApp, важно понимать, чем он отличается от обычного приложения. DApp — это децентрализованное приложение, в котором логика хранится в смарт-контрактах на блокчейне, а данные — в распределённых хранилищах, а не на сервере компании. Поэтому одного знания блокчейна мало: нужен полный набор инструментов — от языков и фреймворков до кошельков и сервисов подключения.</p><ul><li>Блокчейн: Ethereum, Layer‑2 (Arbitrum, Optimism, Base, Polygon), Solana.</li><li>Языки: Solidity (EVM), Rust (Solana), Go (инфраструктура и сервисы).</li><li>Библиотеки: ethers.js, wagmi.</li><li>Фреймворки: Hardhat, Foundry, Truffle.</li><li>Хранилища: IPFS/Arweave для файлов и метаданных.</li><li>Кошельки/подключение: MetaMask, WalletConnect (v2/WalletConnect Network), Web3Auth.</li></ul><blockquote>Точка входа для новичка — Alchemy, а также ethers.js.</blockquote><p><b>Пример.</b> Быстрое подключение кошелька (ethers.js).</p><h2>Архитектура DApp: из чего состоит современное Web3‑приложение</h2><p>Любое Web3‑приложение строится из нескольких слоёв, каждый со своей ролью. Фронтенд остаётся привычным SPA, но работает не с сервером, а напрямую с кошельком и смарт-контрактами. Контракты содержат бизнес‑логику и хранят ссылки на данные в децентрализованных хранилищах. Оракулы обеспечивают связь с внешним миром, например, передают цены или сообщения между разными блокчейнами. Важную часть играет off‑chain слой — сервисы вне блокчейна (индексаторы, аналитика), которые помогают быстрее искать и обрабатывать данные, при этом не перегружать сеть.</p><p><b>Пример.</b> Возьмём DeFi‑приложение. Пользователь открывает фронтенд и инициирует операцию swap(). В ответ фронтенд обращается к смарт‑контракту, который выполняет обмен токенов. Чтобы определить курс, контракт тянет актуальные данные через оракул. При этом тяжёлые артефакты, изображения или отчёты не хранятся в блокчейне напрямую — они лежат в IPFS. Сам контракт содержит только контент‑идентификаторы CID. Таким образом, получаем баланс: блокчейн отвечает за логику и безопасность, а децентрализованное хранилище — за данные.</p><h2>Практика: ваш первый DApp за вечер</h2><p>Давайте попробуем собрать простейшее приложение своими руками.</p><p><b>Шаг 0. Подготовка</b></p><p>Сначала убедитесь, что у вас стоит Node.js LTS и Git. Также нужен браузер с установленным MetaMask, где можно создать тестовый аккаунт. Чтобы оплачивать транзакции в тестовой сети, заранее возьмите немного тестовых монет через faucet — например, для Sepolia или Polygon Amoy.</p><p><b>Шаг 1. Проект</b></p><p>Создадим новый проект и установим Hardhat вместе с тулзами. Эта среда нужна для компиляции и деплоя контрактов.</p><p><b>Шаг 2. Контракт</b></p><p>В папке contracts/ создаём файл TaskTracker.sol и копируем туда код смарт-контракта из первого раздела. Это и будет бизнес-логика нашего приложения.</p><p><b>Шаг 3. Сценарий деплоя</b></p><p>Пишем скрипт, который разворачивает контракт в сети. Это простой скрипт на JavaScript, который вызывает методы Hardhat.</p><p><b>Шаг 4. Конфиг сети</b></p><p>В файле hardhat.config.js добавляем настройки для подключения к тестовой сети. Используем RPC-URL от Alchemy или Infura и приватный ключ от тестового аккаунта — его можно экспортировать из MetaMask, но использовать только для тестовой сети.</p><p><b>Шаг 5. Деплой в тестнет</b></p><p>Теперь запускаем скрипт деплоя. После выполнения увидите адрес контракта — он понадобится для фронтенда.</p><p><b>Шаг 6. Фронтенд (React + ethers.js + wagmi)</b></p><p>Собираем простое SPA: форма, чтобы добавить задачи, и кнопка «complete». Здесь мы используем ethers.js для обращения к контракту. Сделайте вызовы addTask и completeTask.</p><h2>Подводные камни Web3-разработки и что с ними делать</h2><p><b>Комиссии (gas): </b>любая запись в блокчейн стоит денег и иногда комиссия выше ценности операции — например, $10 за простую задачу.</p><ul><li>Что делать: использовать Layer-2 (Arbitrum/Optimism/Base/Polygon), выбирать сети с низкими комиссиями (Solana, Avalanche), оптимизировать контракты и батчи транзакций.</li></ul><p><b>Скорость: </b>подтверждение транзакции занимает секунды или десятки секунд, что заметно медленнее обычного сервера.</p><ul><li>Что делать: показывать «оптимистичный UI», кешировать данные, переносить часть логики off-chain, использовать быстрые сети (Solana, Near, Aptos).</li></ul><p><b>Безопасность:</b> код контракта неизменяем, и одна ошибка может стоить миллионов.</p><ul><li>Что делать: проходить аудит (CertiK, Trail of Bits), использовать проверенные библиотеки (OpenZeppelin), писать тесты в тестовых сетях (Goerli, Sepolia), внедрять баг-баунти и ролевую модель доступа.</li><li>Ресурс:<a href="https://consensys.io/diligence/smart-contract-security-best-practices/"> ConsenSys Diligence — Smart Contract Security Best Practices</a>.</li></ul><p><b>UX:</b> вход через кошелёк сложнее привычного логина/пароля. Нужно ставить расширение, пополнять баланс и подтверждать каждую транзакцию.</p><ul><li>Что делать: использовать аккаунт-абстракцию (ERC-4337), социальный логин, gasless транзакции через Paymaster, улучшать UI (подсказки, авто-фокус на MetaMask).</li></ul><p><b>Регуляция: </b>законы о Web3 пока разные в каждой стране. Легальное в одной юрисдикции может быть запрещено в другой (например, токенизация акций без лицензии).</p><ul><li>Что делать: консультироваться с юристами, следить за изменениями. Например, MiCA в ЕС — “Markets in Crypto-Assets Regulation” —  это единый регламент по криптоактивам в Евросоюзе.</li></ul><blockquote>Безопасность всегда должна быть на первом месте, потому что в Web3 есть риск потерять реальные деньги пользователей.</blockquote><h2>Карьерные возможности и перспективы</h2><p>Web3‑разработчиков уже активно ищут: <a href="https://web3.career/learn-web3/web3-intelligence-report">зарплаты в среднем предлагают выше</a>, чем у Web2‑коллег. Кроме программистов, востребованы смежные роли: аудиторы смарт‑контрактов, специалисты по безопасности, а также продакт‑менеджеры и аналитики, которые понимают специфику блокчейна.</p><p>Чтобы войти в профессию, начните с изучения Solidity и базовых паттернов смарт‑контрактов. Сделайте пару пет‑проектов и выложите код в GitHub. Отличный вариант прокачки — участвовать в хакатонах и грантовых программах от Ethereum Foundation или Solana Grants. Это даёт и опыт, и контакты, и иногда финансирование.</p><blockquote>Пара пет‑проектов + понимание блокчейна — хороший старт в Web3‑команду.</blockquote><h2>Будущее Web3</h2><p>Web3 не вытеснит Web2 полностью, но поменяет привычный подход к разработке. Разработчику это открывает новые вызовы: комиссии, безопасность и UX, но одновременно и новые возможности — прозрачные данные, токенизация, децентрализованные бизнес‑модели.</p><p>Для тех, кто только входит в сферу, это шанс попасть в индустрию на раннем этапе и быстро нарастить экспертизу. Простые пет‑проекты, хакатоны и знакомство с инструментами дают ощутимый старт.</p><p>Web3 будет развиваться параллельно с Web2, усиливая те области, где важны децентрализация, доверие и контроль за данными. Попробуйте задеплоить первый контракт — и вы сами почувствуете, что это не просто мода, а новый уровень возможностей.</p>]]></content:encoded>
    </item>
    <item>
      <title>Топ-10 малоизвестных языков программирования, которые могут выстрелить в будущем</title>
      <link>https://tproger.ru/articles/top-10-maloizvestnyh-yazykov-programmirovaniya--kotorye-mogut-vystrelit-v-budushhem</link>
      <comments>https://tproger.ru/articles/top-10-maloizvestnyh-yazykov-programmirovaniya--kotorye-mogut-vystrelit-v-budushhem?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/top-10-maloizvestnyh-yazykov-programmirovaniya--kotorye-mogut-vystrelit-v-budushhem</guid>
      <description><![CDATA[<p>Языки программирования будущего. Показываем, какие языки наиболее перспективны. Рассматриваем плюсы и минусы каждого Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/top-10-maloizvestnyh-yazykov-programmirovaniya--kotorye-mogut-vystrelit-v-budushhem">Топ-10 малоизвестных языков программирования, которые могут выстрелить в будущем</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Инструменты командной строки]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Квантовые вычисления]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Интернет вещей]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Анализ данных]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[смарт-контракты]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 07 Feb 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Технологический ландшафт постоянно обновляется, и ведущую роль в продвижении инноваций играют языки программирования. Сегодня большинство продуктов создается на Python, C и C++, Java, JavaScript, PHP, но специалисты постоянно развивают другие инструменты.</p><p>Мы собрали топ-10 малоизвестных и относительно новых языков программирования, которые с высокой долей вероятности могут стать популярными в профессиональной среде.</p><h2>Критерии отбора языков</h2><p>Каждый язык остается востребованным, пока им пользуются для написания кода. Например, COBOL, который появился еще в середине прошлого века, до сих пор применим в банковской системе США, а Fortran — в прикладной математике.</p><p>Однако стремительное развитие компьютерных технологий побуждает к разработке принципиально новых, более эффективных и производительных инструментов. Они могут выполнять сугубо утилитарные задачи (вроде управления системами и устройствами), или становятся универсальными средствами программирования.</p><p>Иногда даже сами создатели языка не подозревают, какой продукт у них появился. Так случилось с С, который разработали американские программисты Керниган и Ритчи. Они всего лишь хотели перенести любимую игру с сервера на офисный компьютер, но поскольку действующая операционка не подходила для этих целей, пришлось создавать новый язык. Теперь им пользуются миллионы программистов во всем мире.</p><p>В топ языков программирования входят перспективные для развития инструменты. При отборе мы пользовались экспертными данными, собранными из авторитетных профессиональных источников. Рассмотрим ключевые факторы.</p><h3>Технологический прогресс</h3><p>Языки программирования развиваются параллельно с техническим прогрессом. К числу наиболее актуальных направлении в современной индустрии относятся:</p><ul><li>Искусственный интеллект. Для разработки таких технологий и управления ими нужны языки, способные продуктивно работать со сложными алгоритмами, массивами данных и параллельными вычислениями.</li><li>Квантовые технологии. Новые архитектурные концепции могут «заставить» нас использовать абсолютно непривычные языки.</li><li>Мобильные устройства и IoT. Эта отрасль задает тренд на развитие легких по структуре и более производительных языков, которые работают со встраиваемыми системами.</li><li>Аппараты. Распространение многоядерных процессоров и распределенных по разным компьютерам систем повышает потребность в языках программирования, поддерживающих параллелизм.</li><li>Блокчейн. Да, чтобы проводить смарт-контракты и писать децентрализованные приложения, привычных языков может быть недостаточно.</li></ul><h3>Отраслевые потребности</h3><p>На развитие и востребованность языков программирования влияют и потребности различных отраслей. Например, финансовый сектор нуждается в языках, которые обеспечивают максимальный уровень безопасности и надежности. К таким языкам можно отнести, например, F#.</p><p>В сфере здравоохранения нужны языки, которые упрощают анализ данных диагностики или используются для машинного обучения систем, задействованных в прогнозировании заболеваний. Таким инструментом может стать, например, Solidity. Созданный на этом языке софт на основе ИИ можно применять для аналитики диагностических данных с последующим прогнозированием течения заболеваний.</p><p>В игровой индустрии нужны языки, которые обеспечивают высокую производительность и возможность реализации интерактивных технологий гейминга (например, дополненную реальность) в онлайн-режиме.</p><h3>Тренды в сообществах разработчиков</h3><p>Еще один значимый фактор отбора программных языков — потребности сообщества разработчиков. Профи и любители ориентируются на простоту синтаксиса, наличие библиотек и фреймворков, легкость в использовании инструмента для выполнения реальных задач.</p><p>По этой причине языки с открытым исходным кодом и популярные «народные» продукты с активными сообществами развиваются быстрее. Они способствуют обширной инфраструктуре в виде вспомогательных инструментов и ресурсов.</p><h2>Топ-10 языков программирования</h2><p>Рассмотрим уникальные особенности, сильные стороны и сферы применения языков программирования, которые обладают большим потенциалом.</p><h3>Zig</h3><p>Этот язык в последнее время стал одним из самых обсуждаемых в профессиональном сообществе. В популярных профильных изданиях его даже называют «новой звездой на небосводе современной разработки».</p><p>Его создатель, американский программист Эндрю Келли, ставил задачу объединить плюсы низкоуровневого программирования с надежностью и удобством высокоуровневых языков.</p><p>Это типизированный компилируемый инструмент с инновационными концепциями в основе. Статическая типизация отвечает за максимальную надежность кода и позволяет выявить большинство ошибок еще до выполнения программ.</p><p>Основные плюсы:</p><ul><li>продукты на Zig отличаются стабильностью, безопасностью и простотой дальнейшей поддержки;</li><li>язык можно использовать для разработки низкоуровневого ПО в качестве легковесной альтернативы C;</li><li>выполнение кода в процессе компиляции и ручное управление памятью делает работу более простой и безопасной;</li><li>производительность Zig делает его подходящим инструментом для системного программирования и создания приложений с лимитированными ресурсами.</li></ul><p>Язык будет все активнее использоваться в проектах, где важны производительность и максимальный уровень контроля. Он идеально подходит для разработки игр, сетевого и системного программирования.</p><p>Код на Zig выглядит следующим образом:</p><p>Пример проекта на Zig — репозиторий <a href="https://github.com/zig-gamedev/zig-gamedev?tab=readme-ov-file"> Zig-gamedev</a> для разработки игр на этом языке.</p><figure><img src="https://media.tproger.ru/user-uploads/101528/2025-01-29/7234e496-77ad-449e-a43f-8e3421220993.jpg" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/101528/2025-01-29/f6f7a616-44a0-45ad-9ebc-17c9c4f5421e.png" alt="" /></figure><p>Готовый продукт, созданный на основе модулей библиотеки — фэнтезийная игра от первого лица и с открытым миром Tides of Revival.</p><h3>Crystal</h3><p>Язык с Ruby-подобным, предельно простым синтаксисом и высокой производительностью. Как и Zig, он статически типизирован и компилируем. Объединяет ясность и простоту Ruby с эффективностью и скоростью C.</p><p>В числе главных преимуществ Crystal:</p><ul><li>сходство с синтаксисом Ruby делает его предельно простым для изучения;</li><li>по производительности Crystal не уступает самым востребованным компилируемым языкам;</li><li>проверка в процессе компиляции и глобальный вывод типов позволяют выявлять ошибки на ранних этапах разработки, поэтому язык оптимален для создания приложений.</li></ul><p>Производительность, безопасность и простота применения делают Crystal отличным выбором для написания сценариев, в том числе высокого уровня. На этом языке разрабатывают инструменты командной строки, микросервисы и веб-продукты различной степени сложности. По мере развития фреймворков и библиотек Crystal становится все более востребованным и имеет все шансы войти в число основных языков для разработки приложений.</p><p>Примеры сервисов, созданных на Crystal:</p><ul><li>Kinko booking — платформа для бронирования гостиниц в туристических агентствах в режиме реального времени;</li><li>Eat App — облачные приложения автоматизации для ресторанного бизнеса, повышающие эффективность работы предприятий;</li><li>Nabobil.no — европейский каршеринг.</li></ul><p>Пример кода наглядно демонстрирует лаконичность Crystal:</p><p>puts “Hello World!”</p><h3>Elixir</h3><p>Язык, в котором реализована функциональная методика создания кода, построен на базе виртуальной машины  Erlang. Использует динамическую типизацию переменных, подходит для работы с распределенными системами.</p><p>Главные плюсы:</p><ul><li>динамичность и функциональность языка позволяют использовать его для разработки масштабируемых и отказоустойчивых приложений;</li><li>поскольку код выстраивается из процессов, он отлично справляется с параллелизмом и одновременным выполнением множества задач, в том числе на разных устройствах;</li><li>идеально подходит для создания и поддержки распределенных систем, а также приложений реального времени;</li><li>системы на Elixir продолжают работу даже при отказе нескольких составных частей.</li></ul><p>Язык будет все чаще использоваться для разработки масштабируемых, распределенных и отказоустойчивых бэкенд-систем. Это относится к игровым онлайн-платформам, информационным ресурсам реального времени и другим приложениям с большим трафиком. Поскольку спрос на такие продукты только растет, будущее Elixir выглядит вполне определенным.</p><p>Код тоже предельно лаконичен:</p><p>IO.puts(“Hello, World!”)</p><p>На Elixir создан фреймворк <a href="https://github.com/phoenixframework/phoenix">Phoenix</a>, который содержит модули для разработки быстро масштабируемых приложений.</p><figure><img src="https://media.tproger.ru/user-uploads/101528/2025-01-29/e8f90602-b194-4714-b535-b7839a2ebc95.png" alt="" /><figcaption>Фреймферк Phoenix</figcaption></figure><h3>Nim</h3><p>Этот статически-типизированный и компилируемый язык развивает концепции Ada, Modula, Python, но стремится превзойти их по эффективности и выразительности.</p><p>Основные преимущества:</p><ul><li>язык используется для метапрограммирования — то есть для настройки и генерации кода;</li><li>универсальный синтаксис позволяет применять Nim как для веб-разработки, так и для научных вычислений и работы с большими данными;</li><li>поскольку язык компилируемый, разработчик может использовать для работы не только собственные библиотеки, но и фреймворки на C и C++.</li></ul><p>Nim уже сейчас применяется для веб-разработки, системного программирования и создания сценариев. Однако его универсальность, эффективность и возможность  метапрограммирования делают его инструментом с большим потенциалом, в том числе в сфере разработки продуктов на основе ИИ.</p><p>Код на Nim с последующим компилированием:</p><p>Самые известные фреймворки на Nim —  это <a href="https://github.com/dom96/jester">Jester</a> и <a href="https://github.com/karaxnim/karax">Karax</a>. Первый используется для серверной разработки, второй — для клиентской. Обе библиотеки есть в свободном доступе на GitHub.</p><h3>F#</h3><p>Функционально ориентированный язык, работающий на базе экосистемы .NET — кроссплатформенной среды для разработки приложений.</p><p>Преимущества F#:</p><ul><li>лаконичный и ясный синтаксис, относительно простой для понимания;</li><li>надежный вывод типов, что позволяет использовать F# для машинного обучения, анализа массивов данных и параллельного программирования;</li><li>благодаря безопасности подходит для разработки приложений, работающих с конфиденциальными данными в финансовой сфере.</li></ul><p>Поскольку вся финансовая отрасль постепенно уходит в цифру, а системы становятся все более сложными, F#, как производительный и точный инструмент, все чаще будет использоваться для создания ПО, в котором важна надежность и предельная корректность выполняемых операций.</p><p>В плане лаконичности F# вполне сравним с предыдущими примерами:</p><p>printfn “Hello, world!”</p><p><a href="https://github.com/giraffe-fsharp/Giraffe#giraffe">Giraffe</a> — популярная библиотека на F# для разработки веб-приложений с высокой производительностью и безопасностью.</p><figure><img src="https://media.tproger.ru/user-uploads/101528/2025-01-29/d1fb7e13-8df1-4d82-a7dc-b0e39f088c02.png" alt="" /></figure><p>Еще один полезный фреймворк на этом языке — <a href="https://saturnframework.org/">Saturn</a>.</p><h3>Julia</h3><p>Высокопроизводительный и высокоуровневый язык с динамической типизацией. Изначально создавался для сложных математических вычислений и анализа данных. Объединяет скорость C++ и простоту Python.</p><p>Плюсы Julia:</p><ul><li>высокая скорость, благодаря компиляции Just-In-Time и множеству опций диспетчеризации, делают язык предпочтительным инструментом для сложных вычислений и анализа данных;</li><li>подходит для создания эффективного нативного кода для исполнения алгоритмов на реальном оборудовании;</li><li>язык постоянно обновляется и совершенствуется.</li></ul><p>Способность Julia обрабатывать большие массивы данных и работать со сложными задачами применяется для глубокого обучения, а также разработки ИИ. Язык используется для научных исследований в экономике, физике, астрономии и других дисциплинах. Благодаря тому, что сообщество Julia постоянно растет, а библиотеки регулярно пополняются, язык имеет большой потенциал в науке и машинном обучении.</p><p>Простой сценарий на Julia выглядит так:</p><p>Примеры библиотек на Julia для научных разработок по астрофизике <a href="https://juliaastro.github.io/">JuliaAstro</a>, <a href="https://github.com/JuliaSpace">JuliaSpace</a>, по биологии и химии: <a href="https://biojulia.net/">JuliaBio</a>, <a href="https://github.com/JuliaMolSim">Molecular simulations</a>, по экономике:  <a href="https://julia.quantecon.org/">QuantEcon</a>, <a href="https://github.com/JuliaQuant">JuliaQuant</a>.</p><h3>Scala</h3><p>Этот язык считается флагманом функционального программирования, то есть работает не с конкретными переменными, а с функциями, которые их описывают. Scala компилируется в Java и может использоваться там, где применяется этот язык (практически везде).</p><p>Преимущества:</p><ul><li>объектно-ориентированный подход позволяет создавать более четкий и структурированный код для широкого спектра продуктов;</li><li>лаконичность — простой и краткий синтаксис более удобен, он быстрее пишется и читается;</li><li>код на Scala кроссплатформенный и запускается где угодно, поэтому программистам не нужно думать о совместимости.</li></ul><p>Масштабируемость Scala и его универсальность позволят этому языку в будущем частично заменить Java и в полной мере реализовать концепцию функционального программирования во множестве проектов.</p><p>Код на Scala:</p><p>@main def hello() = println(“Hello, World!”)</p><p>Библиотека <a href="https://github.com/scala-js/scala-js">Scala.js</a> компилирует этот язык в JavaScript. Этого инструмента достаточно, чтобы начать разработку с объектно-ориентированным подходом.</p><h3>Red</h3><p>Минималистичный, лаконичный по синтаксису, но при этом функционально полноценный язык был создан как универсальный инструмент для решения самого широкого круга задач — от написания сценариев до низкоуровневого системного программирования.</p><p>Ключевые преимущества:</p><ul><li>простота синтаксиса, легкость в освоении и использовании делают Red идеальным инструментом для начинающих программистов;</li><li>несмотря на минималистичность, язык обладает мощью и гибкостью, что позволяет использовать его для приложений любого уровня сложности;</li><li>есть множество GUI-библиотек, которые существенно упрощают написание кода на Red.</li></ul><p>Сейчас применение языка ограничивается локальными проектами, но эксперты уверены, что его широкое распространение — вопрос времени. Способность поддерживать как высоко-, так и низкоуровневые проекты позволяет рассчитывать, что Red войдет в число наиболее востребованных языков для мобильной и веб-разработки, IoT, создания драйверов и графических интерфейсов.</p><p>Код на Red:</p><p>На Red написан проект <a href="https://github.com/glebdmitriew/smartXML">SmartXML</a>, предназначенный для хранения и передачи структурированных данных. Он также поддерживает вычисления с большими числами и используется в прикладной математике.</p><h3>Ballerina</h3><p>Язык с открытым исходным кодом, специально созданный для работы с облачными технологиями и разработки сетевых сервисов.</p><p>Плюсы Ballerina:</p><ul><li>использует объектно-ориентированный подход и существенно упрощает обработку данных;</li><li>идеально подходит для работы с микросервисами;</li><li>совмещает функции языка и платформы для интеграции веб-сервисов, поддерживает множество протоколов.</li></ul><p>По мнению экспертного сообщества, Ballerina имеет все шансы стать со временем новым стандартом в разработке облачных структур и веб-сервисов, благодаря разнообразным встроенным инструментам.</p><p>Код на Ballerina выглядит следующим образом:</p><p>На языке, в частности, написано расширение <a href="https://choreo.dev/">Choreo</a> для создания, развертывания и тестирования облачных приложений непосредственно из редактора Visual Studio Code.</p><figure><img src="https://media.tproger.ru/user-uploads/101528/2025-01-29/d6cf2389-97e1-46e1-9375-1f264ed125cd.png" alt="" /></figure><h3>Solidity</h3><p>Высокоуровневый язык, разработанный для виртуальной машины Ethereum. Функционирует на основе блокчейна и смарт-контрактов. Синтаксис Solidity напоминает Python, при этом язык основан на принципиально иных концепциях.</p><p>Плюсы Solidity:</p><ul><li>позволяет быстро и эффективно создавать смарт-контракты, не испытывая технических сложностей;</li><li>относительно прост для освоения для тех, кто знаком с Python и Java.</li></ul><p>Большинство экспертов считают, что со временем смарт-контракты будут использоваться практически во всех отраслях промышленности, где есть цифровые технологии. Уже сегодня смарты применяют для управления цепями поставок, а также в сфере здравоохранения для сохранения конфиденциальности данных пациентов.</p><p>Создание смарт-контракта на Solidity выглядит так:</p><p>На Solidity работают децентрализованные проекты типа Uniswap и Compound, где можно брать кредиты в крипте без посредников, а также NFT-маркетплейсы OpenSea и Rarible.Игра<a href="https://www.cryptokitties.co/"> Cryptokitties</a> для покупки, разведения и продажи виртуальных кошек тоже написана на этом языке.</p><figure><img src="https://media.tproger.ru/user-uploads/101528/2025-01-29/f8295011-b3a6-402d-a281-2711f1e10f39.png" alt="" /></figure><h2>Как выбрать язык для изучения</h2><p>При выборе перспективного языка программирования разработчику в первую очередь стоит учитывать область своих профессиональных интересов. Собственные инструменты есть в сферах веб-приложений, игр, продуктов на основе ИИ, программ для аналитики данных.</p><p>Аспекты, на которые стоит обязательно обратить внимание —  активность сообщества и наличие подробной документации. Все языки из представленного нами списка развиваются и имеют обширную аудиторию пользователей.</p><p>Значение имеют и вспомогательные инструменты — библиотеки и фреймворки. Готовые решения значительно упрощают как освоение языка, так и разработку конкретных продуктов для прикладных задач.</p><p>Следите за трендами ИТ-индустрии. Направления с серьезным потенциалом развития в ближайшие 10 лет: ИИ; квантовые вычисления; интернет вещей; блокчейн и смарт-контракты; автоматизация и робототехника.</p><p>Изучив новые языки раньше других, вы сможете опередить рынок и стать востребованным специалистом с минимальной конкуренцией. Если вы новичок, вы дадите мощный старт своей карьере разработчика.</p><p>А если хотите изучить хотя бы один из языков (или просто присматриваетесь) — все самые полезные инструменты <a href="https://t.me/+Qi8OJ_0gQZUyMWEy">тут</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Написание смарт-контракта для NFT</title>
      <link>https://tproger.ru/articles/napisanie-smart-kontrakta-dlja-nft</link>
      <comments>https://tproger.ru/articles/napisanie-smart-kontrakta-dlja-nft?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Карен Костанян]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/napisanie-smart-kontrakta-dlja-nft</guid>
      <description><![CDATA[<p>Смарт-контракт для NFT создаётся в Hardhat и Ethereum: этапы включают подготовку проекта и выпуск собственного токена для коллекции.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/napisanie-smart-kontrakta-dlja-nft">Написание смарт-контракта для NFT</a>»</p>]]></description>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Гостевая публикация]]></category>
      <category><![CDATA[смарт-контракты]]></category>
      <category><![CDATA[NFT]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 08 Apr 2022 14:02:08 GMT</pubDate>
      <content:encoded><![CDATA[<p>Привет! Меня зовут Костанян Карен, я занимаюсь разработкой на Node.js в цифровом интеграторе Secreate. В этой статье мы разберемся как написать смарт контракт и отчеканить наши нфт.</p><p>Если у вас нет медиафайлов и метаданных NFT в формате JSON, мы создали коллекцию изображений, с которыми вы можете поэкспериментировать. Вы можете найти медиафайлы <a href="https://gateway.pinata.cloud/ipfs/Qma4gpUr5ZasvnW12yJW8PdfYZ4EtF3VNPEgdFBWvBrF42">здесь</a> и файлы метаданных JSON <a href="https://gateway.pinata.cloud/ipfs/QmTMo6DFrfzKGGbkYsyMZRe16jBJcCcV72ZJHcM3a3Z2w7">здесь</a>.</p><p>Мы будем использовать Hardhat, стандартную среду разработки Ethereum, для разработки, развертывания и проверки наших смарт-контрактов. Создайте пустую папку для нашего проекта и инициализируйте пустой файл package.json, выполнив в терминале следующую команду:</p><p>Теперь вы должны находиться в папке my-nft и иметь файл с именем package.json. Далее давайте установим Hardhat. Выполните следующую команду:</p><p>После установки hardhat, мы можем создать пример проекта Hardhat, выполнив следующую команду:</p><p>После этой команды, мы увидим несколько пунктов для выбора, выберите пункт (Create a basic sample project) и согласитесь со всем по умолчанию.</p><p>Давайте проверим, правильно ли установлен наш пример проекта. Выполните следующую команду:</p><p>Если все прошло успешно, вы должны увидеть следующее, отличия может быть адрес контракта:</p><figure><img src="https://media.tproger.ru/uploads/2022/04/Adres-kontrakta.png" alt="" /></figure><p>Теперь у нас есть успешно настроенная среда разработки hardhat.</p><p>Далее, давайте установим пакет контрактов OpenZeppelin. Это даст нам доступ к контрактам ERC721 (стандарт для NFT).</p><p>Если мы хотим поделиться кодом нашего проекта публично (на веб-сайте, таком как GitHub), и при этом мы не хотим делиться конфиденциальной информацией, такой как наш закрытый ключ,  API Etherscan или наш URL-адрес Alchemy (не беспокойтесь, если некоторые из этих слов вам пока не понятны), давайте установим другую библиотеку с именем dotenv.</p><p>Теперь мы установили все зависимости и можем приступить написанию нашего контракта.</p><h2>Написание смарт-контракта</h2><p>Наш контракт должен уметь чеканить наши NFT, а именно чеканить NFT бесплатно для владельца и продавать NFT нашим пользователям. И самое главное выводить эфиры на наш кошелек.</p><p>Вот как будет сначала выглядит наш контракт:</p><p>1. pragma solidity ^0.8.9</p><p>Весь исходный код Solidity должен начинаться с объявления версии компилятора Solidity, которую должен использовать этот код. Это делается для предотвращения проблем с будущими версиями компилятора, которые потенциально могут внести изменения, которые могут нарушить ваш код.</p><p>2. import</p><p>Если у вас есть несколько файлов и вы хотите импортировать один файл в другой, Solidity использует ключевое слово import.</p><p>3. PRICE</p><p>Цена для чеканки(mint) одного NFT.</p><p>4. baseTokenURI</p><p>URL-адрес IPFS папки, содержащей метаданные JSON.</p><p>5. mapping</p><p>Это одно из видов хранилища данных (ключей и значений) который называется Storage, здесь мы будет хранить все токены принадлежащего пользователя.</p><p>6. event</p><p>Это способ нашего контракта сообщает интерфейсу вашего приложения о том, что что-то произошло в блокчейне, и может прослушивать определенные события и предпринимать действия, когда они происходят.</p><p>Далее, мы установим baseTokenURI в нашем конструкторе. Мы также вызовем родительский конструктор(ERC721) и установим имя и символ для наших NFT.</p><p>Таким образом, наш конструктор выглядит так:</p><p>Когда мы устанавливаем его в качестве базового URI, реализация OpenZeppelin автоматически выводит URI для каждого токена. Предполагается, что метаданные токена 1 будут доступны по адресу</p><p>ipfs:/QmTMo6DFrfzKGGbkYsyMZRe16jBJcCcV72ZJHcM3a3Z2w7/1,</p><p>а метаданные токена 2 будут доступны по адресу ipfs:/QmTMo6DFrfzKGGbkYsyMZRe16jBJcCcV72ZJHcM3a3Z2w7/2</p><p>и так далее.</p><p>Однако нам нужно сообщить нашему контракту, что переменная baseTokenURI, которую мы определили, является базовым URI, который должен использовать контракт. Для этого мы переопределяем пустую функцию _baseURI() и возвращаем baseTokenURI.</p><p>Мы также пишем функцию для владельца, которая позволяет владельцу изменять baseTokenURI даже после развертывания контракта.</p><h2>Резервация nft для владельца</h2><p>Как владелец, вы можете зарезервировать несколько NFT для себя бесплатно (оплату надо сделать только за газ).</p><p>Здесь мы определяем публичную функцию reserveNFT, которая принимает один параметр _tokenId. Это и будет наш токен который мы хотим чеканить и зарезервировать для себя. Обратите внимание, что у этого параметра есть нижнее подчеркивание (_). Он не обязателен, но есть не прописанное внутреннее правило, что все входящие параметры мы пишем со знаком _;</p><p>1. _safeMint</p><p>Это та самая чудесная функция которая делает чеканку, ее мы берем из контракта ERC721.</p><p>2. nftOwner.</p><p>Сохраняем кому принадлежит этот токен.</p><p>3. emit</p><p>Запускаем наше событие, что пользователь (msg.sender) сделал чеканку (_tokenId)</p><h2>Функция Mint NFT</h2><p>Пришло время заработать немного денег. Для того чтобы пользователи могли чеканить наши nft они должны вызвать функцию mintNFT.</p><p>1. payable</p><p>Это модификатор, который дает знать что функция подлежит к оплате и пользователь отправляет эфир.</p><p>2. require:</p><p>Проверяет чтобы отправленный эфир был достаточным для чеканки nft.</p><h2>Получение всех токенов, принадлежащих определенному пользователю.</h2><p>Функция принимает адрес пользователя и возвращает токены которые мы хранили в хранилище nftOwner.</p><h2>Вывод баланса</h2><p>Самая прекрасная функция. Ее запуск, отправляет на кошелек владельца все заработанные эфиры.</p><p>Функцию может запустить только владелец.</p><p>1. balance – выбирает всю сумму на балансе контракта.</p><p>2. Проверяет чтобы баланс был положительным.</p><p>3. Отправляет эфир на кошелек владельца.</p><p>4. Проверяет что трансфер прошел успешно, в противном случае идет откат транзакции.</p><h2>Проверка токена (modifier)</h2><p>Если вы заметили, наши функции для чеканки reserveNFT, mintNFT могут чеканить токен который уже ранее уже был отчеканен. И перед началом процесса, мы не проверяем был ли данный токе уже отчеканен или нет. Для этого мы создадим модифаер который будет проверять статус токена до чеканки.</p><p>Модификатор функции выглядит так же как функция, но использует ключевое слово modifier вместо function. Его нельзя вызвать напрямую как функцию, вместо этого мы можем присоединить имя модификатора в конце определения функции, чтобы изменить ее поведение.</p><p>В modifier мы проверяем отчеканен ли переданный на чеканку токен. А все уже отчеканенные токены мы будем хранить в хранилище soldedTokenIds.</p><p>Самую главную роль здесь играет нижнее подчеркивание, которое находится в последней строке у модификатора. Оно вызывает остальную часть функции, на которую был вызван модификатор checkTokenStatus.</p><p>Для того чтобы наш модификатор начал правильно функционировать, мы должны добавить одно хранилище (Storage) soldedTokenIds и немного отредактировать наши функции для чеканки reserveNFT и mintNFT.</p><p>1. В самом верху контракт добавляем наше хранилище.</p><p>2. Отредактируем наши функции reserveNFT и mintNFT.</p><p>После чеканки мы храним ид токен в хранилище soldedTokenIds, и в конце функции мы добавили наш модификатор с параметром который получает наша функция.</p><p>Вот мы закончили с нашим смарт контрактом, он должен выглядеть следующим образом.</p><h2>Развертывание контракта</h2><p>Для того чтобы мы могли посмотреть как работает наш контракт, мы должны развернуть его на тестовых сетях, например на Rinkeby.</p><p><b>Примечание</b>. Советую развернуть его на сети Rinkeby, чтобы мы могли посмотреть результат на платформе opensea, так как из других сетей на данный момент это будет невозможно.</p><p>Для развертывания нам понадобятся следующие вещи. URL-адрес RPC, закрытый ключ от кошелька и апи ключ от etherscan.io</p><p>1. Нам понадобится URL-адрес RPC, который позволит транслировать нашу транзакцию создания контракта. Мы будем использовать Алхимию. Создайте учетную запись в Alchemy, потом необходимо создать приложение (это бесплатно).</p><figure><img src="https://media.tproger.ru/uploads/2022/04/jeto-besplatno.png" alt="" /></figure><p>Пишем любое название, CHAIN: Ethereum, NETWORK: Rinkeby</p><p>После того как приложение создано, перейдите на панель инструментов Alchemy и выберите его. Откроется новое окно с кнопкой View Key в правом верхнем углу. Нажмите на кнопку и выберите URL-адрес HTTP.</p><p>2. Для того чтобы получить приватный ключ от кошелька, откройте расширение Metamask, нажмите на троеточие в правом углу, и в открывшемся окне нажмите на “Реквизиты счета”, затем на кнопку “Экспортировать закрытый ключ”.</p><p>После получения HTTP-адреса и закрытого ключа от кошелька, мы их пропишем в .env файл.</p><p>Теперь замените файл hardhat.config.js следующим содержимым.</p><p>Затем создадим файл scripts/run.js со следующим содержимым. IPFS URL замените со своим ipfs-ом (пример: ipfs://some_token/) или можете использовать наш ipfs который был описан выше.</p><p>Мы уже готовы для разворачивания нашего смарт контракта, но для этого нам потребуются деньги на нашем счете.</p><p>Фейковый эфир, вы можете взять отсюда:</p><p>Теперь когда у вас на счете есть деньги, нам надо развернуть наш контракт, для этого нужно набрать следующую команду и так как это уже реальная транзакция в сети rinkeby, мы должны будем платить газ, вот для чего нам нужен был эфир на счете.</p><p>Если все прошло успешно вы должны увидеть адрес вашего контракта. В нашем случае:</p><p><b>0xd440a80F4845D5bf1AdD3868573e286e2Df04df0</b></p><p>Вы можете проверить этот контракт на <a href="https://rinkeby.etherscan.io/">Etherscan</a>. Перейдите на <a href="https://rinkeby.etherscan.io/">Etherscan</a> и введите адрес контракта. Вы должны увидеть что-то вроде этого.</p><figure><img src="https://media.tproger.ru/uploads/2022/04/chto-to-vrode-jetogo..png" alt="" /></figure><p>Нам осталось верифицировать наш контракт, чтобы полноценно использовать его.</p><p>Для верификации нам понадобится ключ Etherscan API. Зарегистрируйте бесплатную учетную запись <a href="https://etherscan.io/">здесь</a> и получите доступ к своим ключам API <a href="https://etherscan.io/login?cmd=last">здесь</a>. Добавим этот ключ API в наш файл .env.</p><p>Установим следующий пакет для проверки нашего контракта.</p><p>npm install @nomiclabs/hardhat-etherscan</p><p>Теперь наш hardhat.config.js должен выглядеть следующим образом:</p><p>Теперь выполните следующие две команды:</p><p>npx hardhat clean</p><p></p><p>На места DEPLOYED_CONTRACT_ADDRESS поставьте тот адрес контракта который получили ранее, на места BASE_TOKEN_URI поставьте ваш ipfs url.</p><p>В нашем случае вторая команда выглядела так:</p><p>Теперь, если вы посетите страницу Rinkeby Etherscan вашего контракта, вы должны будете увидеть маленькую зеленую галочку рядом с вкладкой Contract, которая подтверждает что ваш контракт верифицирован и ваши пользователи теперь смогут подключаться к web3 с помощью Metamask и вызывать функции вашего контракта из самого Etherscan! Попробуйте это сами.</p><p>Подключите учетную запись, которую вы использовали для развертывания контракта и вызовите функцию reserveNFT, потом можете попросить кого-нибудь сделать чеканку через функцию mintNFT.</p><p>После того как вы отчеканили nft через reserveNFT или через mintNFT, вы на стороне OpenSea должны увидеть ваши nft (testnets.opensea.io)</p><figure><img src="https://media.tproger.ru/uploads/2022/04/uvidet-vashi-nft.png" alt="" /></figure><p>После того как у вас в балансе у контракта появится эфир, только вы как владелец можете запустить функцию withdraw и после успешной транзакции на ваш кошелек зачислится весь баланс из контракта.</p><h2>Заключение</h2><p>Теперь у нас есть развернутый смарт-контракт, который позволяет пользователям чеканить NFT из нашей коллекции. Очевидным следующим шагом будет создание приложения web3, которое позволит нашим пользователям создавать NFT прямо с вашего веб-сайта.</p>]]></content:encoded>
    </item>
    <item>
      <title>Что такое смарт-контракты, где можно их применять и при чём тут блокчейн</title>
      <link>https://tproger.ru/blogs/smart-contracts</link>
      <comments>https://tproger.ru/blogs/smart-contracts?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Туренко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/blogs/smart-contracts</guid>
      <description><![CDATA[<p>Смарт-контракт — набор описанных в цифровой форме обещаний и протоколов их исполнения. Чем он отличается от классического договора и где применяется.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/blogs/smart-contracts">Что такое смарт-контракты, где можно их применять и при чём тут блокчейн</a>»</p>]]></description>
      <category><![CDATA[Блокчейн]]></category>
      <category><![CDATA[смарт-контракты]]></category>
      <category><![CDATA[Блоги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 19 Mar 2019 10:07:45 GMT</pubDate>
      <content:encoded><![CDATA[<p>Рассказывает Дарья Шишко, комьюнити-менеджер в Aeternity</p><p>Классический контракт — это устное или письменное соглашение с набором условий. В современном мире выполнение условий контракта гарантирует государство. Если одна из сторон не соблюдает условия соглашения, суд определит правонарушителей и обяжет их нести ответственность. Такие контракты постоянно встречаются в быту: при аренде квартиры, страховании автомобиля или трудоустройстве.</p><p>С классическими контрактами связаны и трудности. Составлять текст документа должен специалист, иначе в условиях соглашения могут остаться пробелы и неточности. Юристы любят использовать профессиональную лексику, которую тяжело понять обычному человеку. Ещё один важный нюанс — наличие судьи, который разрешает споры между сторонами соглашения. К тому же, само по себе судебное разбирательство требует времени и денег.</p><p>До определённого момента такой формат соглашений оставался наилучшим.</p><h2>Что такое смарт-контракт?</h2><p>С переходом к цифровым методам общения, хранения и обработки информации появился фундамент для новой формы контрактов. В 1996 году Ник Сабо <a href="http://www.fon.hum.uva.nl/rob/Courses/InformationInSpeech/CDROM/Literature/LOTwinterschool2006/szabo.best.vwh.net/smart_contracts_2.html">разработал</a> концепцию самоисполнимых цифровых контрактов. Автор назвал их «смарт-контракты» (от англ. smart contract — умный контракт). Согласно определению Ника Сабо, смарт-контракт — это набор описанных в цифровой форме обещаний, включающий набор протоколов, по которым стороны выполняют свои обещания.</p><p>В отчёте Сената США за 2018 год сказано:</p><p><em>Термин «смарт-контракт» может звучать по-новому, но сама концепция уходит корнями к базовому договорному праву. Обычно судебная система выносит решения по договорным спорам и обеспечивает выполнение условий соглашения, но имеют место и другие арбитражные методы, особенно для международных транзакций. В случае со смарт-контрактами программа сама исполняет контракт, встроенный в код</em></p><p>Оригинальный пример прообраза смарт-контракта из работы Ника Сабо — торговый автомат. Человек опускает в автомат монету, и автомат выдаёт напиток или шоколадку. Это взаимодействие — сделка, которая подразумевает покупку товара за установленную сумму. Отличие этой ситуации от классического контракта в том, что автомат самостоятельно выполняет условия сделки: если прошла оплата, механизм выдаёт товар.</p><p>Чтобы система была безопасной, максимальная сумма средств в автомате не должна превышать затраты на взлом.</p><h2>Смарт-контракты на блокчейне</h2><p>Реальное практическое применение смарт-контрактам нашлось с появлением технологии блокчейн. Децентрализованные системы на основе блокчейна — та среда, в которой выполнение смарт-контракта не зависит от третьего лица, а его код нельзя произвольно изменить. Вне такой среды смарт-контракт будет просто программным кодом.</p><p>Важный параметр смарт-контракта на блокчейне — полнота по Тьюрингу. Простыми словами, полнота по Тьюрингу — это возможность системы выполнить любую вычислимую функцию. То есть Тьюринг-полной будет система, которая может выполнить любую компьютерную программу.</p><p>Блокчейн Bitcoin использует неполный по Тьюрингу язык программирования <a href="https://en.bitcoin.it/wiki/Script">Script</a>. Bitcoin поддерживает простые смарт-контракты с мультиподписью (для выполнения действия нужны цифровые подписи нескольких участников), удержанием средств на установленное время и так далее.</p><p>Блокчейн Ethereum работает со смарт-контрактами на Тьюринг-полном языке программирования <a href="https://solidity.readthedocs.io/en/v0.4.25/">Solidity</a>. Solidity позволяет создавать более сложные алгоритмы, но такие смарт-контракты гораздо сложнее проверить на наличие уязвимостей.</p><p>Разработчик и популяризатор блокчейн-технологий Джимми Сонг <a href="https://medium.com/@jimmysong/the-truth-about-smart-contracts-ae825271811f">отметил</a>:</p><p><em>Выполнение кода в Тьюринг-полном контексте — хитрая штука, которую тяжело анализировать. Обезопасить Тьюринг-полный смарт-контракт так же сложно, как доказать, что в компьютерной программе нет багов.</em></p><p>Кроме Bitcoin и Ethereum, существуют специализированные платформы для работы со смарт-контрактами: Aeternity, EOS, Hyperledger Fabric, Stellar и другие. Такие платформы отличаются от названных выше пропускной способностью и стоимостью обработки транзакций, алгоритмом консенсуса и позиционированием.</p><h2>Зачем нужны смарт-контракты?</h2><p>С одной стороны, смарт-контракт — это просто программный код, обычное приложение как калькулятор, мессенджер или видеоигра. С другой стороны, смарт-контракт — это фундаментальный элемент любого распределенного приложения (distributed application или DApp), которое работает в среде без доверия и централизованной власти вроде администратора веб-сайта или государства. То есть смарт-контракт исполняет всё тот же программный код, но этот код нельзя произвольно изменить или воспрепятствовать его исполнению без вмешательства в работу всей сети. Это базис для любого децентрализованного приложения, особенно если имеет место обмен ценностями: деньгами, товарами, правами.</p><p>В централизованной платежной системе вроде гигантов Visa и Mastercard есть администрация, которая разрешает возможные споры, поддерживает работу серверов и взимает комиссию с платежей. Администрация может блокировать неугодные ей транзакции или перенаправить платёж на собственный счёт. Репутация системы пострадает, а администрацию такой компании будут преследовать по закону за мошенничество, но с технической точки зрения ничто не мешает таким манипуляциям. В децентрализованной системе ни у кого нет такой власти, а смарт-контракт подчиняется только заранее заложенным в него правилам.</p><h2>Где можно применять смарт-контракты?</h2><p>Согласно <a href="https://www2.deloitte.com/insights/us/en/focus/signals-for-strategists/using-blockchain-for-smart-contracts.html">анализу</a> Deloitte 2016 года, клиринг в торговых операциях и цепочки поставок — первые кандидаты на внедрение смарт-контрактов. Среди других перспективных областей исследователи назвали здравоохранение, страхование, медиаиндустрию, энергетику, ведение архивов и голосование.</p><h3>Клиринг</h3><p>Это безналичные расчёты между сторонами за товары, услуги или ценные бумаги с учётом взаимных обязательств. Клиринг подразумевает множество согласований между банками и юридическими или физическими лицами. Клиринговой компании нужно учесть все взаиморасчёты между клиентами, чтобы минимизировать движение денег между счетами и сумму комиссий за переводы.</p><p>Например, если Алиса должна заплатить Бобу 100 $ за ремонт компьютера, Боб должен заплатить Крису 150 $ за юридические услуги, а Крис должен заплатить 100 $ Алисе за дизайн сайта, всё, что нужно сделать, — перевести 50 $ от Боба Крису, и все будут в расчёте. Именно такими взаиморасчётами и их оптимизацией занимаются клиринговые компании, только в большем масштабе.</p><p>В реальном мире такая деятельность связана с комплексным документооборотом и ведением учёта множества сущностей и транзакций. Это дорого и долго, а из-за сложности процесса возникают ошибки и дополнительные задержки. Клиринговые компании и их клиенты могут использовать блокчейн-реестр для учёта транзакций и взаимных обязательств, а система смарт-контрактов обеспечит автоматическое проведение платежей и фиксацию данных в распределённом реестре. Согласно исследованиям Santander InnoVentures, к 2022 году внедрение блокчейна и смарт-контрактов может снизить ежегодные инфраструктурные затраты на 15–20 миллиардов долларов США.</p><h3>Цепочки поставок</h3><p>Смарт-контракты и блокчейн — актуальное решение для обслуживания цепочки поставок от сырья до готовых продуктов. Чаще всего сопроводительная информация для каждого из этапов хранится в отдельных базах данных, а бумажные документы до сих пор приходится пересылать физически. Чтобы собрать один ноутбук, кому-то нужно добыть нефть и металлы, из которых кто-то сделает пластиковый гранулят и нужные сплавы, которые впоследствии превратятся в детали и попадут в сборочный цех. На каждом из этапов нужно передавать и подписывать документы, высылать счета, переводить деньги и т. д. Всю эту информацию можно объединить в одном реестре, чтобы всем сторонам были доступны документы, история транзакций и поставок. Смарт-контракты позволят автоматически распределять платежи после согласования и получения нужных цифровых подписей. Кроме того, в цепочку поставок на блокчейне значительно проще добавлять новых участников вроде поставщиков и перевозчиков.</p><h3>Здравоохранение</h3><p>Блокчейн и смарт-контракты позволят создать единый безопасный реестр медицинских записей. Учитывая деликатность информации, доступ к записям можно ограничить смарт-контрактом с мультиподписью: если пациент и его лечащий врач согласны показать информацию другому специалисту, они поставят цифровые подписи и система откроет доступ указанному человеку. Объединение в один реестр поможет вести научные исследования и анонимные опросы, а если учёные решать наградить тех, кто делится информацией, смарт-контракты — оптимальный способ обеспечить выплату по факту передачи информации.</p><h3>Интернет вещей</h3><p>В интернете вещей (Internet of Things, IoT) безопасность и неизменяемость блокчейн-реестра вместе с возможностями смарт-контрактов позволят наладить прозрачные механизмы взаимодействия и обмена ценностями между гаджетами вроде умных холодильников, смартфонов, термостатов и автомобилей. Умный электромобиль может одной транзакцией инициировать оплату за электричество и смарт-контракт активирует зарядное устройство. Права владения этими гаджетами тоже можно фиксировать в блокчейне, а значит, пользователь сможет продать или подарить устройство не покидая блокчейн-сети и без привлечения третьих лиц.</p><h3>Медиаиндустрия</h3><p>Для правообладателей и создателей контента актуальна проблема роялти — платы за использование интеллектуальной собственности. Здесь смарт-контракты можно использовать для прозрачного распределения средств.</p><p>То же самое относится и к другим областям, где нужно обеспечить учёт и прозрачное проведение платежей без доверия между сторонами: страхованию, энергетике и так далее. Для голосования и ведения государственных архивов блокчейн и смарт-контракты — возможность оптимизировать доступ к данным и авторизацию участников, будь то архив земельного кадастра или избирательный процесс.</p><h2>Проблемы смарт-контрактов</h2><h3>Оракулы</h3><p>Одна из основных технических преград полномасштабному внедрению блокчейн-реестра и смарт-контрактов — необходимость создать эффективные и надёжные оракулы. Оракулы — это внешние агенты, которые отвечают за достоверность предоставленной информации извне.</p><p>Блокчейн-реестр — изолированная среда, внутри которой с помощью криптографических доказательств и протоколов консенсуса все участники могут проверить истинность тех или иных данных. Но для широкого применения этим системам нужно получать информацию из внешнего мира: подтверждать факт получения товара, идентифицировать участников, получать биржевые сводки и так далее. Такая информация поступает в систему через оракулы.</p><p>Оракулами могут быть:</p><ul><li>измерительные приборы вроде термометра или датчика освещенности;</li><li>конкретные участники сети, которые оказывают услуги блокчейн-системе;</li><li>децентрализованные системы с собственными механизмами консенсуса, построенные поверх основного реестра.</li></ul><p>В некоторых случаях, как в блокчейне Aeternity, оракулы <a href="https://blog.aeternity.com/blockchain-oracles-657f134ffbc0">интегрированы</a> с основным блокчейном и работают в рамках одного механизма консенсуса с остальной сетью. Пользователи сети посылают оракулам запросы посредством транзакций на блокчейне, а оракулы отвечают им соответствующей он-чейн транзакцией. Вопрос и ответ остаются в реестре, а остальные пользователи могут сверяться с этими данными.</p><h3>Юридическая сила</h3><p>Другая проблема — необходимость в новой регуляторной среде, которая учитывала бы возможности блокчейна и определила юридическую силу смарт-контрактов и внесенных в реестр данных, таких как права владения недвижимостью или предметами.</p><h3>Недоверие к блокчейну</h3><p>Блокчейн-технологии развиваются уже около десяти лет, если считать точкой отсчёта whitepaper Bitcoin, но в сравнении с другими технологиями и методиками, задействованными в современной финансовой системе, блокчейн остается молодой и не до конца зарекомендовавшей себя технологией. Из-за этого консервативные участники рынка относятся к нему скептически.</p><h2>Выводы</h2><p>Уже сейчас многие традиционные банки и ведомства <a href="http://www.ibtimes.co.uk/r3-completes-trial-five-cloud-based-blockchain-technologies-40-banks-1547260">экспериментируют</a> с блокчейн-технологиями и смарт-контрактами и инвестируют в проекты в этой отрасли. По мере того, как проекты вроде Augur, Aeternity и Oraclize решают проблему оракулов и совершенствуют технологию, всё больше государственных структур и бизнесов будут внедрять распределённый реестр и смарт-контракты для оптимизации своей работы и прозрачного учёта.</p><p>Смарт-контракты уже сейчас могут заменить значительную часть существующего документооборота. Любые типовые соглашения о страховании или передаче имущества можно реализовать как смарт-контракты. Однако для нестандартных случаев традиционные контракты останутся основным элементом соглашения. В роли базиса для распределённых приложений и аналога обычной компьютерной программы для распределённой среды смарт-контракты скорее всего будут использоваться практически повсеместно.</p>]]></content:encoded>
    </item>
  </channel>
</rss>