Криптография с открытым ключом | Все, что Вам нужно знать

В этом посте вы узнаете, что такое криптография с открытым ключом в блокчейне и как работает криптография с открытым ключом?

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

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

Криптография с открытым ключом или асимметричная криптография, несомненно, является одним из известных криптографических методов, используемых в настоящее время. Итак, что такое криптография с открытым ключом или асимметричная криптография? В следующем обсуждении представлен подробный отчет о криптографии с открытым ключом, объясненный примерами, характеристиками алгоритма и выдающимися преимуществами. 

Что такое криптография с открытым ключом?


Первый пункт обсуждения в любом введении в криптографию с открытым ключом относится к ее определению. Как следует из названия, тип шифрования с использованием открытого ключа известен как открытый ключ или асимметричная криптография. Итак, почему асимметрия включена в определение? Асимметричная криптография включает в себя создание открытого ключа и закрытого ключа. 

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

Однако постепенный рост числа незащищенных компьютерных сетей в последнее время обусловил необходимость более широкого внедрения криптографии. Симметричная криптография оказалась непригодной для крупномасштабного внедрения из-за проблем с управлением ключами. В результате пример с криптографией с открытым ключом послужил наиболее удачным решением проблем симметричной криптографии.

Симметричная и асимметричная криптография

Прежде чем углубляться в детали шифрования с открытым ключом, важно обратить внимание на разницу между симметричным и асимметричным шифрованием или шифрованием с открытым ключом. Различия могут помочь вам понять явные преимущества открытого ключа в блокчейне по сравнению с симметричным шифрованием. В случае симметричной криптографии один ключ используется как для шифрования, так и для дешифрования. 

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

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

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

Читайте также: Как блокчейн использует криптографию с открытым ключом?

Проблемы, решаемые шифрованием с открытым ключом

Примечания по криптографии с открытым ключом также сосредоточены на проблемах, которые она решает. Важно учитывать причины использования шифрования с открытым ключом. Интернет-трафик перемещает информацию через различные промежуточные компьютеры в сети. Таким образом, сторонние агенты могут перехватывать непрерывно текущий интернет-трафик для получения конфиденциальной информации вредоносными способами. Проблемы, решаемые шифрованием с открытым ключом, производят сильное впечатление относительно его преимуществ.

Вот краткое описание некоторых распространенных угроз, которые можно устранить с помощью шифрования с открытым ключом.

  • Фальсификация

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

  • Подслушивание

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

  • Кража личных данных 

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

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

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

  1. Encryption and Decryption

Encryption and decryption are probably the most common terms you would come across in a public key cryptography example. Both of them help two parties to cover up the information transferred between them. The sender scrambles the information (encryption) before sending, and the receiver unscrambles the information (decryption) after receiving the message. During the process of moving from the sender to the receiver, the information is not readable by any unauthorized party.

2. Authentication

Public key cryptographic technologies also emphasize the value of authentication. Authentication is essential to enable the recipient of a message to find out the origin of the message through the confirmation of sender’s identity. 

3. Обнаружение

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

4. Неотказуемость. Неотказуемость

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

Работа шифрования с открытым ключом

Итак, как на самом деле выглядит шифрование с открытым ключом в реальном мире? Следующий пример криптографии с открытым ключом может помочь вам понять, как это работает. 

  1. Отправитель Джон хочет отправить важный деловой документ Мэри, своей коллеге в той же компании. Деловой документ является строго конфиденциальным, и его должна видеть только Мэри.
  2. Итак, Джон использует свой открытый ключ для шифрования делового документа перед его отправкой Мэри.
  3. Теперь деловой документ превратился в зашифрованные данные и совершенно нечитаем для любого другого сотрудника компании.
  4. Мэри могла получить сообщение и использовать свой закрытый ключ для расшифровки сообщения, отправленного Джоном,
  5. Мэри могла получить исходные данные, отправленные Джоном, с помощью своего закрытого ключа.

Посмотрите, как просто реализовать криптографию с открытым ключом! 

Теперь важно выяснить, какие важные компоненты определяют работу шифрования с открытым ключом. Важными компонентами открытого ключа или асимметричной криптографии являются открытый текст, зашифрованный текст, алгоритм шифрования, алгоритм дешифрования и, что наиболее важно, открытый ключ и закрытый ключ. Каждый компонент выполняет уникальную функцию в общей инфраструктуре шифрования с открытым ключом. 

  1. Простой текст, как следует из названия, относится к сообщению, которое может быть интерпретировано или прочитано любым человеком. Простой текст служит входом для алгоритма шифрования.
  2. Зашифрованный текст является результатом работы алгоритма шифрования. Зашифрованное сообщение совершенно неразборчиво для всех.
  3. Алгоритм шифрования и алгоритм дешифрования играют наиболее важную роль в криптографии с открытым ключом. Алгоритм шифрования помогает преобразовать обычный текст в зашифрованный текст. С другой стороны, алгоритм дешифрования принимает зашифрованный текст в качестве входных данных вместе с соответствующей парой ключей для создания исходного открытого текста.
  4. Открытый и закрытый ключи важны в экосистеме открытых ключей. Можно использовать любой из ключей для шифрования, когда вы можете использовать другой для расшифровки.

Важные черты шифрования с открытым ключом

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

  1. Шифрование с открытым ключом предполагает использование разных ключей для шифрования и дешифрования. Использование разных ключей для шифрования и дешифрования помогает отличить шифрование с открытым ключом от симметричной криптографии.
  2. У каждого получателя есть свой персональный ключ дешифрования, известный как закрытый ключ.
  3. Получатель также должен продемонстрировать ключ шифрования, известный как его открытый ключ.
  4. Криптография с открытым ключом также полагается на доказательство подлинности открытого ключа, чтобы избежать опасений спуфинга со стороны вредоносных агентов. Система шифрования с открытым ключом использует услуги доверенных сторонних поставщиков для проверки владения открытым ключом.
  5. Следующая важная характеристика шифрования с открытым ключом относится непосредственно к алгоритму. Алгоритм криптографии с открытым ключом для шифрования должен иметь идеально сложные характеристики, чтобы злоумышленники не могли получить открытый текст или незашифрованное сообщение с помощью зашифрованного текста или зашифрованного сообщения и открытого ключа шифрования.

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

Алгоритмы шифрования с открытым ключом

Как вы, должно быть, уже поняли, шифрование с открытым ключом сильно зависит от алгоритмов процессов шифрования и дешифрования. В настоящее время существует около трех различных типов алгоритмов шифрования с открытым ключом. Однако наиболее заметное упоминание среди всех алгоритмов, используемых для шифрования с открытым ключом, относится к алгоритму RSA. 

Алгоритм RSA, разработанный Роном Ривестом, Ади Шамиром и Леном Адлеманом, предлагает широкий набор криптографических алгоритмов. Он имеет репутацию надежного инструмента для поддержки шифрования с открытым ключом. Фактически, различные протоколы, такие как SSL/TLS, OpenPGP, безопасная оболочка и S/MIME, используют RSA для криптографии. 

RSA нашел широкое применение в качестве алгоритма шифрования с открытым ключом в браузерах, которым необходимо устанавливать безопасные соединения через Интернет. Кроме того, наиболее распространенные задачи, выполняемые в системах, подключенных к сети, включают проверку цифровой подписи RSA. Он может предложить очень надежный уровень безопасности. Алгоритм RSA представляет трудности при разложении на множители больших целых чисел, полученных как произведения двух больших простых чисел. 

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

Проблемы в криптографии с открытым ключом

При всех таких особенностях криптографии с открытым ключом существует множество преимуществ, которыми пользуются корпоративные секторы, использующие этот метод шифрования, но есть несколько проблем, с которыми приходится сталкиваться при использовании криптографии с открытым ключом.

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

С помощью алгоритмов криптографии с открытым ключом скорость является одной из наиболее часто встречающихся проблем. Известно, что существует множество методов шифрования данных, которые обеспечивают более быструю работу. Но есть способ, с помощью которого эта проблема может быть преодолена, и он сочетает криптографию с открытым ключом с системой секретного ключа, чтобы также можно было ощутить преимущества систем с открытым ключом и более высокую скорость системы с закрытым ключом. который является обеспеченным и скрытным, также можно испытать.

Еще одна серьезная проблема, которую необходимо упомянуть в этом разделе, — это уязвимость к атакам со стороны скомпрометированных органов. Такие атаки происходят, когда киберпреступники решают выдать себя за кого-то другого, выбирая сертификаты открытых ключей. Следовательно, день получает доступ к открытому ключу, используя имена других пользователей.

Бизнес-приложения криптографии с открытым ключом

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

Преимущества криптографии с открытым ключом

Преимущества методов криптографии с открытым ключом многочисленны, и в этой части вы познакомитесь с каждым из них, перечисленным в приведенных ниже указателях:

  • Безопасность данных — одно из самых известных преимуществ криптографии с открытым ключом. Поскольку для шифрования данных доступны два ключа, один из которых является частным, а другой общедоступным, как упоминалось выше, становится намного проще безопасно расшифровать данные в небезопасной сети. Таким образом, аутентификация с использованием криптографии с открытым ключом является первым и главным преимуществом.
  • Прозрачность — еще одно обязательное условие в этом списке. Поскольку в этой теории и практике криптографии с открытым ключом установлена ​​односторонняя связь, прозрачность системы становится двойной.
  • Аутентичное создание цифровых подписей, а также проверка цифровых подписей также могут быть возможны с помощью принципов и алгоритмов криптографии с открытым ключом. Следовательно, это должно быть еще одно преимущество метода.

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

Это снижает потребность в управлении несколькими ключами, как в случае симметричной криптографии. Шифрование с открытым ключом позволяет получателям подтвердить свое право собственности на закрытый ключ, не раскрывая свои данные. Кроме того, существенные прорывы в мире вычислений заложили основу для появления новых алгоритмов.

What is GEEK

Buddha Community

Криптография с открытым ключом | Все, что Вам нужно знать

В этом посте вы узнаете, что такое криптография с открытым ключом в блокчейне и как работает криптография с открытым ключом?

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

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

Криптография с открытым ключом или асимметричная криптография, несомненно, является одним из известных криптографических методов, используемых в настоящее время. Итак, что такое криптография с открытым ключом или асимметричная криптография? В следующем обсуждении представлен подробный отчет о криптографии с открытым ключом, объясненный примерами, характеристиками алгоритма и выдающимися преимуществами. 

Что такое криптография с открытым ключом?


Первый пункт обсуждения в любом введении в криптографию с открытым ключом относится к ее определению. Как следует из названия, тип шифрования с использованием открытого ключа известен как открытый ключ или асимметричная криптография. Итак, почему асимметрия включена в определение? Асимметричная криптография включает в себя создание открытого ключа и закрытого ключа. 

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

Однако постепенный рост числа незащищенных компьютерных сетей в последнее время обусловил необходимость более широкого внедрения криптографии. Симметричная криптография оказалась непригодной для крупномасштабного внедрения из-за проблем с управлением ключами. В результате пример с криптографией с открытым ключом послужил наиболее удачным решением проблем симметричной криптографии.

Симметричная и асимметричная криптография

Прежде чем углубляться в детали шифрования с открытым ключом, важно обратить внимание на разницу между симметричным и асимметричным шифрованием или шифрованием с открытым ключом. Различия могут помочь вам понять явные преимущества открытого ключа в блокчейне по сравнению с симметричным шифрованием. В случае симметричной криптографии один ключ используется как для шифрования, так и для дешифрования. 

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

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

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

Читайте также: Как блокчейн использует криптографию с открытым ключом?

Проблемы, решаемые шифрованием с открытым ключом

Примечания по криптографии с открытым ключом также сосредоточены на проблемах, которые она решает. Важно учитывать причины использования шифрования с открытым ключом. Интернет-трафик перемещает информацию через различные промежуточные компьютеры в сети. Таким образом, сторонние агенты могут перехватывать непрерывно текущий интернет-трафик для получения конфиденциальной информации вредоносными способами. Проблемы, решаемые шифрованием с открытым ключом, производят сильное впечатление относительно его преимуществ.

Вот краткое описание некоторых распространенных угроз, которые можно устранить с помощью шифрования с открытым ключом.

  • Фальсификация

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

  • Подслушивание

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

  • Кража личных данных 

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

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

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

  1. Encryption and Decryption

Encryption and decryption are probably the most common terms you would come across in a public key cryptography example. Both of them help two parties to cover up the information transferred between them. The sender scrambles the information (encryption) before sending, and the receiver unscrambles the information (decryption) after receiving the message. During the process of moving from the sender to the receiver, the information is not readable by any unauthorized party.

2. Authentication

Public key cryptographic technologies also emphasize the value of authentication. Authentication is essential to enable the recipient of a message to find out the origin of the message through the confirmation of sender’s identity. 

3. Обнаружение

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

4. Неотказуемость. Неотказуемость

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

Работа шифрования с открытым ключом

Итак, как на самом деле выглядит шифрование с открытым ключом в реальном мире? Следующий пример криптографии с открытым ключом может помочь вам понять, как это работает. 

  1. Отправитель Джон хочет отправить важный деловой документ Мэри, своей коллеге в той же компании. Деловой документ является строго конфиденциальным, и его должна видеть только Мэри.
  2. Итак, Джон использует свой открытый ключ для шифрования делового документа перед его отправкой Мэри.
  3. Теперь деловой документ превратился в зашифрованные данные и совершенно нечитаем для любого другого сотрудника компании.
  4. Мэри могла получить сообщение и использовать свой закрытый ключ для расшифровки сообщения, отправленного Джоном,
  5. Мэри могла получить исходные данные, отправленные Джоном, с помощью своего закрытого ключа.

Посмотрите, как просто реализовать криптографию с открытым ключом! 

Теперь важно выяснить, какие важные компоненты определяют работу шифрования с открытым ключом. Важными компонентами открытого ключа или асимметричной криптографии являются открытый текст, зашифрованный текст, алгоритм шифрования, алгоритм дешифрования и, что наиболее важно, открытый ключ и закрытый ключ. Каждый компонент выполняет уникальную функцию в общей инфраструктуре шифрования с открытым ключом. 

  1. Простой текст, как следует из названия, относится к сообщению, которое может быть интерпретировано или прочитано любым человеком. Простой текст служит входом для алгоритма шифрования.
  2. Зашифрованный текст является результатом работы алгоритма шифрования. Зашифрованное сообщение совершенно неразборчиво для всех.
  3. Алгоритм шифрования и алгоритм дешифрования играют наиболее важную роль в криптографии с открытым ключом. Алгоритм шифрования помогает преобразовать обычный текст в зашифрованный текст. С другой стороны, алгоритм дешифрования принимает зашифрованный текст в качестве входных данных вместе с соответствующей парой ключей для создания исходного открытого текста.
  4. Открытый и закрытый ключи важны в экосистеме открытых ключей. Можно использовать любой из ключей для шифрования, когда вы можете использовать другой для расшифровки.

Важные черты шифрования с открытым ключом

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

  1. Шифрование с открытым ключом предполагает использование разных ключей для шифрования и дешифрования. Использование разных ключей для шифрования и дешифрования помогает отличить шифрование с открытым ключом от симметричной криптографии.
  2. У каждого получателя есть свой персональный ключ дешифрования, известный как закрытый ключ.
  3. Получатель также должен продемонстрировать ключ шифрования, известный как его открытый ключ.
  4. Криптография с открытым ключом также полагается на доказательство подлинности открытого ключа, чтобы избежать опасений спуфинга со стороны вредоносных агентов. Система шифрования с открытым ключом использует услуги доверенных сторонних поставщиков для проверки владения открытым ключом.
  5. Следующая важная характеристика шифрования с открытым ключом относится непосредственно к алгоритму. Алгоритм криптографии с открытым ключом для шифрования должен иметь идеально сложные характеристики, чтобы злоумышленники не могли получить открытый текст или незашифрованное сообщение с помощью зашифрованного текста или зашифрованного сообщения и открытого ключа шифрования.

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

Алгоритмы шифрования с открытым ключом

Как вы, должно быть, уже поняли, шифрование с открытым ключом сильно зависит от алгоритмов процессов шифрования и дешифрования. В настоящее время существует около трех различных типов алгоритмов шифрования с открытым ключом. Однако наиболее заметное упоминание среди всех алгоритмов, используемых для шифрования с открытым ключом, относится к алгоритму RSA. 

Алгоритм RSA, разработанный Роном Ривестом, Ади Шамиром и Леном Адлеманом, предлагает широкий набор криптографических алгоритмов. Он имеет репутацию надежного инструмента для поддержки шифрования с открытым ключом. Фактически, различные протоколы, такие как SSL/TLS, OpenPGP, безопасная оболочка и S/MIME, используют RSA для криптографии. 

RSA нашел широкое применение в качестве алгоритма шифрования с открытым ключом в браузерах, которым необходимо устанавливать безопасные соединения через Интернет. Кроме того, наиболее распространенные задачи, выполняемые в системах, подключенных к сети, включают проверку цифровой подписи RSA. Он может предложить очень надежный уровень безопасности. Алгоритм RSA представляет трудности при разложении на множители больших целых чисел, полученных как произведения двух больших простых чисел. 

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

Проблемы в криптографии с открытым ключом

При всех таких особенностях криптографии с открытым ключом существует множество преимуществ, которыми пользуются корпоративные секторы, использующие этот метод шифрования, но есть несколько проблем, с которыми приходится сталкиваться при использовании криптографии с открытым ключом.

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

С помощью алгоритмов криптографии с открытым ключом скорость является одной из наиболее часто встречающихся проблем. Известно, что существует множество методов шифрования данных, которые обеспечивают более быструю работу. Но есть способ, с помощью которого эта проблема может быть преодолена, и он сочетает криптографию с открытым ключом с системой секретного ключа, чтобы также можно было ощутить преимущества систем с открытым ключом и более высокую скорость системы с закрытым ключом. который является обеспеченным и скрытным, также можно испытать.

Еще одна серьезная проблема, которую необходимо упомянуть в этом разделе, — это уязвимость к атакам со стороны скомпрометированных органов. Такие атаки происходят, когда киберпреступники решают выдать себя за кого-то другого, выбирая сертификаты открытых ключей. Следовательно, день получает доступ к открытому ключу, используя имена других пользователей.

Бизнес-приложения криптографии с открытым ключом

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

Преимущества криптографии с открытым ключом

Преимущества методов криптографии с открытым ключом многочисленны, и в этой части вы познакомитесь с каждым из них, перечисленным в приведенных ниже указателях:

  • Безопасность данных — одно из самых известных преимуществ криптографии с открытым ключом. Поскольку для шифрования данных доступны два ключа, один из которых является частным, а другой общедоступным, как упоминалось выше, становится намного проще безопасно расшифровать данные в небезопасной сети. Таким образом, аутентификация с использованием криптографии с открытым ключом является первым и главным преимуществом.
  • Прозрачность — еще одно обязательное условие в этом списке. Поскольку в этой теории и практике криптографии с открытым ключом установлена ​​односторонняя связь, прозрачность системы становится двойной.
  • Аутентичное создание цифровых подписей, а также проверка цифровых подписей также могут быть возможны с помощью принципов и алгоритмов криптографии с открытым ключом. Следовательно, это должно быть еще одно преимущество метода.

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

Это снижает потребность в управлении несколькими ключами, как в случае симметричной криптографии. Шифрование с открытым ключом позволяет получателям подтвердить свое право собственности на закрытый ключ, не раскрывая свои данные. Кроме того, существенные прорывы в мире вычислений заложили основу для появления новых алгоритмов.

Парсинг веб-страниц с помощью Python: все, что вам нужно знать

Введение:

В этом посте, который можно прочитать как продолжение нашего руководства по очистке веб-страниц без блокировки , мы рассмотрим почти все инструменты, которые Python предлагает для очистки веб-страниц. Мы пойдем от базовых к продвинутым, рассказывая о плюсах и минусах каждого. Конечно, мы не сможем охватить все аспекты каждого инструмента, который мы обсуждаем, но этот пост должен дать вам хорошее представление о том, что делает каждый инструмент и когда его использовать.

Примечание. Когда я говорю о Python в этом сообщении блога, вы должны понимать, что я говорю о Python3.

0. Основы Интернета

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

Протокол передачи гипертекста

Протокол передачи гипертекста (HTTP) использует модель клиент/сервер . HTTP-клиент (браузер, ваша программа Python, cURL, библиотеки, такие как Requests...) открывает соединение и отправляет сообщение («Я хочу увидеть эту страницу: /product») на HTTP-сервер (Nginx, Apache. ..). Затем сервер отвечает ответом (например, HTML-кодом) и закрывает соединение.

HTTP называется протоколом без сохранения состояния, поскольку каждая транзакция (запрос/ответ) независима. FTP, например, сохраняет состояние, потому что он поддерживает соединение.

По сути, когда вы вводите адрес веб-сайта в браузере, HTTP-запрос выглядит следующим образом:

GET /product/ HTTP/1.1
Host: example.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch, br
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 12_3_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36

В первой строке этого запроса вы можете увидеть следующее:

  • HTTP - метод или глагол. В нашем случае GETэто означает, что мы хотим получить данные. Существует довольно много других методов HTTP, например (например, для загрузки данных), и их полный список доступен здесь .
  • Путь к файлу, каталогу или объекту , с которым мы хотели бы взаимодействовать. В данном случае это каталог productпрямо под корневым каталогом.
  • Версия протокола HTTP . В этом уроке мы сосредоточимся на HTTP 1.
  • Несколько полей заголовков : Connection, User-Agent... Вот исчерпывающий список заголовков HTTP .

Вот наиболее важные поля заголовка:

  • Хост: этот заголовок указывает имя хоста, для которого вы отправляете запрос. Этот заголовок особенно важен для виртуального хостинга на основе имени , который является стандартом в современном мире хостинга.
  • User-Agent: содержит информацию о клиенте, инициирующем запрос, включая ОС. В данном случае это мой веб-браузер (Chrome) на macOS. Этот заголовок важен, потому что он используется либо для статистики (сколько пользователей посещают мой сайт с мобильных устройств и компьютеров), либо для предотвращения нарушений со стороны ботов. Поскольку эти заголовки отправляются клиентами, они могут быть изменены ( «Подмена заголовков» ). Именно это мы и будем делать с нашими парсерами — сделаем наши парсеры похожими на обычный веб-браузер .
  • Принять: это список типов MIME , которые клиент примет в качестве ответа от сервера. Существует множество различных типов и подтипов контента: текст/обычный, текст/html, изображение/jpeg, приложение/json ...
  • Cookie : это поле заголовка содержит список пар «имя-значение» (имя1=значение1; имя2=значение2). Файлы cookie — это один из способов, с помощью которого веб-сайты могут хранить данные на вашем компьютере. Это может быть либо до определенной даты истечения срока действия (стандартные файлы cookie), либо только временно, пока вы не закроете браузер (сеансовые файлы cookie). Файлы cookie используются для различных целей, начиная от информации для аутентификации и заканчивая настройками пользователей и более гнусными вещами, такими как отслеживание пользователей с помощью персонализированных уникальных идентификаторов пользователей. Тем не менее, они являются жизненно важной функцией браузера .для указанной аутентификации. Когда вы отправляете форму входа, сервер проверит ваши учетные данные и, если вы указали действительный логин, создаст файл cookie сеанса, который четко идентифицирует сеанс пользователя для вашей конкретной учетной записи пользователя. Ваш браузер получит этот файл cookie и будет передавать его вместе со всеми последующими запросами.
  • Referer : Заголовок referrer (обратите внимание на опечатку ) содержит URL-адрес, с которого был запрошен фактический URL-адрес. Этот заголовок важен, потому что веб-сайты используют этот заголовок для изменения своего поведения в зависимости от того, откуда пришел пользователь. Например, многие новостные веб-сайты имеют платную подписку и позволяют просматривать только 10% публикации, но если пользователь приходит с новостного агрегатора, такого как Reddit, они позволяют просматривать весь контент. Они используют реферер, чтобы проверить это. Иногда нам придется подделать этот заголовок, чтобы получить содержимое, которое мы хотим извлечь.

И этот список можно продолжить... полный список заголовков можно найти здесь .

Сервер ответит примерно так:

HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Content-Type: text/html; charset=utf-8
Content-Length: 3352

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" /> ...[HTML CODE]

В первой строке у нас есть новая часть информации, код HTTP 200 OK. Код 200 означает, что запрос был правильно обработан. Полный список всех доступных кодов вы можете найти в Википедии . После строки состояния у вас есть заголовки ответов, которые служат той же цели, что и заголовки запросов, которые мы только что обсуждали. После заголовков ответа у вас будет пустая строка, за которой следуют фактические данные, отправленные с этим ответом.

Как только ваш браузер получит этот ответ, он проанализирует HTML-код, извлечет все встроенные ресурсы (файлы JavaScript и CSS, изображения, видео) и отобразит результат в главном окне.

Мы рассмотрим различные способы выполнения HTTP-запросов с помощью Python и извлечем нужные данные из ответов.

1. Открытие сокета вручную и отправка HTTP-запроса

Разъем

Самый простой способ выполнить HTTP-запрос в Python — открыть TCP-сокет и вручную отправить HTTP-запрос.

import socket

HOST = 'www.google.com'  # Server hostname or IP address
PORT = 80                # The standard port for HTTP is 80, for HTTPS it is 443

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = (HOST, PORT)
client_socket.connect(server_address)

request_header = b'GET / HTTP/1.0\r\nHost: www.google.com\r\n\r\n'
client_socket.sendall(request_header)

response = ''
while True:
    recv = client_socket.recv(1024)
    if not recv:
        break
    response += str(recv)

print(response)
client_socket.close()  

Теперь, когда у нас есть HTTP-ответ, самый простой способ извлечь из него данные — использовать регулярные выражения.

Обычные выражения

Регулярные выражения (или также регулярное выражение) — чрезвычайно универсальный инструмент для обработки, анализа и проверки произвольного текста. Регулярное выражение — это, по сути, строка, определяющая шаблон поиска с использованием стандартного синтаксиса. Например, вы можете быстро идентифицировать все телефонные номера на веб-странице.

В сочетании с классическим поиском и заменой регулярные выражения также позволяют выполнять подстановку строк в динамических строках относительно простым способом. Самый простой пример в контексте парсинга веб-страниц может заключаться в замене тегов в верхнем регистре в плохо отформатированном HTML-документе соответствующими аналогами в нижнем регистре.

Теперь вам может быть интересно, почему важно понимать регулярные выражения при просмотре веб-страниц. Это справедливый вопрос, и, в конце концов, существует множество различных модулей Python для анализа HTML с селекторами XPath и CSS.

В идеальном семантическом мире данные легко считываются машиной, а информация встроена в соответствующие элементы HTML со значимыми атрибутами. Но реальный мир беспорядочен. Вы часто будете находить огромное количество текста внутри <p>элемента. Например, если вы хотите извлечь определенные данные внутри большого текста (цена, дата, имя...), вам придется использовать регулярные выражения.

Примечание. Вот отличный веб-сайт для проверки вашего регулярного выражения: https://regex101.com/ . Кроме того, вот замечательный блог , чтобы узнать о них больше. В этом посте будет рассмотрена лишь малая часть того, что вы можете сделать с помощью регулярных выражений.

Регулярные выражения могут быть полезны, когда у вас есть такие данные:

<p>Price : 19.99$</p>

Мы могли бы выбрать этот текстовый узел с выражением XPath, а затем использовать регулярное выражение такого типа для извлечения цены:

^Price\s*:\s*(\d+\.\d{2})\$

Если у вас есть только HTML, это немного сложнее, но не более того. Вы также можете просто указать тег в своем выражении, а затем использовать группу захвата для текста.

import re

html_content = '<p>Price : 19.99$</p>'

m = re.match('<p>(.+)<\/p>', html_content)
if m:
	print(m.group(1))

Как видите, можно вручную отправить HTTP-запрос с помощью сокета и проанализировать ответ с помощью регулярного выражения, но это сложно, и существуют API более высокого уровня, которые могут упростить эту задачу.

2. urllib3 и LXML

Отказ от ответственности : в Python легко заблудиться во вселенной urllib. Стандартная библиотека содержит urllib и urllib2 (а иногда и urllib3). В Python3 urllib2 был разделен на несколько модулей, и в ближайшее время urllib3 не будет частью стандартной библиотеки. Эта запутанная ситуация будет предметом другого сообщения в блоге. В этом разделе я решил рассказать только о urllib3, потому что он широко используется в мире Python, в том числе Pip и Requests.

Urllib3 — это высокоуровневый пакет, который позволяет вам делать с HTTP-запросом практически все, что вы хотите. С urllib3 мы могли бы делать то, что делали в предыдущем разделе, с гораздо меньшим количеством строк кода.

import urllib3
http = urllib3.PoolManager()
r = http.request('GET', 'http://www.google.com')
print(r.data)

Как видите, это гораздо более лаконично, чем версия сокета. Мало того, API прост. Кроме того, вы можете легко делать многие другие вещи, такие как добавление заголовков HTTP, использование прокси-сервера, отправка форм...

Например, если бы мы решили установить некоторые заголовки и использовать прокси, нам нужно было бы сделать только следующее (вы можете узнать больше о прокси-серверах на сайте bestproxyreviews.com ):

import urllib3
user_agent_header = urllib3.make_headers(user_agent="<USER AGENT>")
pool = urllib3.ProxyManager(f'<PROXY IP>', headers=user_agent_header)
r = pool.request('GET', 'https://www.google.com/')

Видеть? Там точно такое же количество строк. Однако есть некоторые вещи, с которыми urllib3 не очень легко справляется. Например, если мы хотим добавить куки, мы должны вручную создать соответствующие заголовки и добавить их в запрос.

Есть также вещи, которые urllib3 может делать, чего не могут запросы: например, создание и управление пулом и прокси-пулом, а также управление стратегией повторных попыток.

Проще говоря, urllib3 находится между Requests и Socket с точки зрения абстракции, хотя он намного ближе к Requests, чем к Socket.

Далее, чтобы проанализировать ответ, мы будем использовать пакет LXML и выражения XPath.

XPath

XPath — это технология, использующая выражения пути для выбора узлов или наборов узлов в документе XML (или документе HTML). Если вы знакомы с концепцией селекторов CSS, вы можете представить ее как нечто относительно похожее.

Как и объектная модель документа, XPath является стандартом W3C с 1999 года. Хотя XPath сам по себе не является языком программирования, он позволяет вам писать выражения, которые могут напрямую обращаться к определенному узлу или определенному набору узлов без необходимости пройтись по всему дереву HTML (или дереву XML).

Чтобы извлечь данные из HTML-документа с помощью XPath, нам нужны три вещи:

  • HTML-документ
  • некоторые выражения XPath
  • механизм XPath, который будет запускать эти выражения

Для начала мы будем использовать HTML, который мы получили от urllib3. А теперь мы хотели бы извлечь все ссылки с главной страницы Google. Итак, мы будем использовать одно простое выражение XPath //a, и мы будем использовать LXML для его запуска. LXML — это быстрая и простая в использовании библиотека обработки XML и HTML, которая поддерживает XPath.

Установка :

pip install lxml

Ниже приведен код, который идет сразу после предыдущего фрагмента:

from lxml import html

# We reuse the response from urllib3
data_string = r.data.decode('utf-8', errors='ignore')

# We instantiate a tree object from the HTML
tree = html.fromstring(data_string)

# We run the XPath against this HTML
# This returns an array of element
links = tree.xpath('//a')

for link in links:
    # For each element we can easily get back the URL
    print(link.get('href'))

И вывод должен выглядеть так:

https://books.google.fr/bkshp?hl=fr&tab=wp
https://www.google.fr/shopping?hl=fr&source=og&tab=wf
https://www.blogger.com/?tab=wj
https://photos.google.com/?tab=wq&pageId=none
http://video.google.fr/?hl=fr&tab=wv
https://docs.google.com/document/?usp=docs_alc
...
https://www.google.fr/intl/fr/about/products?tab=wh

Имейте в виду, что этот пример действительно очень прост и не показывает, насколько мощным может быть XPath (Примечание: мы могли бы также использовать //a/@href, чтобы указать прямо на hrefатрибут). Если вы хотите узнать больше о XPath, вы можете прочитать это полезное введение . Документация LXML также хорошо написана и является хорошей отправной точкой .

Выражения XPath, как и регулярные выражения, являются мощными и одними из самых быстрых способов извлечения информации из HTML. Как и регулярные выражения, XPath может быстро запутаться, стать трудным для чтения и обслуживания.

Если вы хотите узнать больше о XPath, не стесняйтесь прочитать мою специальную запись в блоге о применении XPath в парсинге веб-страниц .

это

3. Запросы и BeautifulSoup

Запросы

Запросы — король пакетов Python. С более чем 11 000 000 загрузок это наиболее широко используемый пакет для Python.

Монтаж:

pip install requests

Сделать запрос с помощью — каламбур — Requests очень просто:

import requests

r = requests.get('https://www.scrapingninja.co')
print(r.text)

С помощью Requests легко выполнять POST-запросы, обрабатывать файлы cookie, параметры запросов... Вы также можете загружать изображения с помощью Requests .

На следующей странице вы научитесь использовать запросы с прокси . Это почти обязательно для очистки веб-страниц в масштабе.

Аутентификация в Hacker News

Допустим, мы хотим создать инструмент для автоматической отправки нашего сообщения в блоге на новости Hacker или на любой другой форум, например Buffer. Нам нужно пройти аутентификацию на этих веб-сайтах, прежде чем размещать ссылку. Это то, что мы собираемся сделать с Requests и BeautifulSoup!

Вот форма входа в Hacker News и связанный с ней DOM:

Форма входа в Hacker News


 

На этой форме есть три <input>тега с nameатрибутом (другие элементы ввода не отправляются). Первый имеет скрытый тип с именем «goto», а два других — это имя пользователя и пароль.

Если вы отправите форму в браузере Chrome, вы увидите, что многое происходит: устанавливается перенаправление и файл cookie. Этот файл cookie будет отправляться Chrome при каждом последующем запросе, чтобы сервер знал, что вы прошли аутентификацию.

Сделать это с запросами легко. Он будет автоматически обрабатывать перенаправления для нас, а обработка файлов cookie может выполняться с помощью объекта Session .

КрасивыйСуп

Следующее, что нам понадобится, это BeautifulSoup , библиотека Python, которая поможет нам проанализировать HTML, возвращаемый сервером, чтобы узнать, вошли ли мы в систему или нет.

Монтаж:

pip install beautifulsoup4

Итак, все, что нам нужно сделать, это отправить эти три входа с нашими учетными данными в конечную точку /login и проверить наличие элемента, который отображается только после входа в систему:

import requests
from bs4 import BeautifulSoup

BASE_URL = 'https://news.ycombinator.com'
USERNAME = ""
PASSWORD = ""

s = requests.Session()

data = {"goto": "news", "acct": USERNAME, "pw": PASSWORD}
r = s.post(f'{BASE_URL}/login', data=data)

soup = BeautifulSoup(r.text, 'html.parser')
if soup.find(id='logout') is not None:
	print('Successfully logged in')
else:
	print('Authentication Error')

Фантастически, всего с парой строк кода Python нам удалось войти на сайт и проверить, был ли вход успешным. Теперь перейдем к следующей задаче: получить все ссылки на главной странице.

Кстати, Hacker News предлагает мощный API , так что мы делаем это в качестве примера, но вам следует использовать API, а не парсить его!

Первое, что нам нужно сделать, это изучить домашнюю страницу Hacker News, чтобы понять структуру и различные классы CSS, которые нам нужно будет выбрать:

HTML-код хакерских новостей


 

Как видно из скриншота, все посты являются частью <tr>тега с классом athing. Итак, давайте просто найдем все эти теги. Опять же, мы можем сделать это с помощью одной строки кода.

links = soup.findAll('tr', class_='athing')

Затем для каждой ссылки мы извлечем ее идентификатор, заголовок, URL-адрес и рейтинг:

import requests
from bs4 import BeautifulSoup

r = requests.get('https://news.ycombinator.com')
soup = BeautifulSoup(r.text, 'html.parser')
links = soup.findAll('tr', class_='athing')

formatted_links = []

for link in links:
	data = {
		'id': link['id'],
		'title': link.find_all('td')[2].a.text,
		"url": link.find_all('td')[2].a['href'],
		"rank": int(link.find_all('td')[0].span.text.replace('.', ''))
	}
	formatted_links.append(data)

print(formatted_links)

Отлично, с помощью всего пары строк кода Python нам удалось загрузить сайт Hacker News и получить подробную информацию обо всех сообщениях. Но на пути к большим данным мы хотим не только печатать данные, но и сохранять их . Давайте попробуем это сейчас.

Хранение наших данных в PostgreSQL

Для нашего примера мы выбрали старую добрую реляционную базу данных — PostgreSQL !

Для начала нам понадобится функционирующий экземпляр базы данных. Для этого зайдите на www.postgresql.org/download , выберите подходящий пакет для вашей операционной системы и следуйте инструкциям по его установке. После того, как вы установили PostgreSQL , вам нужно настроить базу данных (назовем ее scrape_demo) и добавить в нее таблицу для наших ссылок Hacker News (назовем ее hn_links) со следующей схемой.

CREATE TABLE "hn_links" (
	"id" INTEGER NOT NULL,
	"title" VARCHAR NOT NULL,
	"url" VARCHAR NOT NULL,
	"rank" INTEGER NOT NULL
);

💡 Для управления базой данных вы можете использовать собственный клиент командной строки PostgreSQL или один из доступных интерфейсов пользовательского интерфейса .

Итак, база данных должна быть готова, и мы снова можем обратиться к нашему коду.

Во-первых, нам нужно что-то, что позволит нам общаться с PostgreSQL, и Psycopg — действительно отличная библиотека для этого. Как всегда, вы можете быстро установить его с помощью pip .

pip install psycopg2

Остальное относительно легко и просто. Нам просто нужно получить соединение

con = psycopg2.connect(host="127.0.0.1", port="5432", user="postgres", password="", database="scrape_demo")

Это соединение позволит нам получить курсор базы данных

cur = con.cursor()

И когда у нас есть курсор, мы можем использовать метод execute, чтобы фактически запустить нашу команду SQL.

cur.execute("INSERT INTO table [HERE-GOES-OUR-DATA]")

Отлично, мы сохранили все в нашей базе данных!

Придержите лошадей, пожалуйста. Не забудьте commitпро свою (неявную) транзакцию базы данных 😉. Еще один con.commit()(и пара closeсекунд), и мы действительно готовы к работе.

таблица hn_links


 

И в завершение, вот полный код с предыдущей логикой очистки, на этот раз сохраняющий все в базе данных.

import psycopg2
import requests
from bs4 import BeautifulSoup

# Establish database connection
con = psycopg2.connect(host="127.0.0.1",
                       port="5432",
                       user="postgres",
                       password="",
                       database="scrape_demo")

# Get a database cursor
cur = con.cursor()

r = requests.get('https://news.ycombinator.com')
soup = BeautifulSoup(r.text, 'html.parser')
links = soup.findAll('tr', class_='athing')

for link in links:
	cur.execute("""
		INSERT INTO hn_links (id, title, url, rank)
		VALUES (%s, %s, %s, %s)
		""",
		(
			link['id'],
			link.find_all('td')[2].a.text,
			link.find_all('td')[2].a['href'],
			int(link.find_all('td')[0].span.text.replace('.', ''))
		)
	)

# Commit the data
con.commit();

# Close our database connections
cur.close()
con.close()

Резюме

Как видите, Requests и BeautifulSoup — отличные библиотеки для извлечения данных и автоматизации различных действий, таких как отправка форм. Если вы хотите запускать крупномасштабные проекты по очистке веб-страниц, вы все равно можете использовать запросы, но вам придется обрабатывать множество частей самостоятельно.

Если вы хотите узнать больше о Python, BeautifulSoup, POST-запросах и особенно о селекторах CSS, я настоятельно рекомендую следующие статьи.

 

Как это часто бывает, конечно, есть много возможностей для улучшения:

  • Найдите способ распараллелить свой код, чтобы сделать его быстрее
  • Обработка ошибок
  • Фильтрация результатов
  • Регулировка вашего запроса, чтобы вы не перегружали сервер

К счастью для нас, существуют инструменты, которые могут справиться с этим за нас.

GRequests

Хотя пакет Requests прост в использовании, он может показаться немного медленным, если вам нужно очистить сотни страниц. По умолчанию он позволит вам отправлять только синхронные запросы, а это означает, что если у вас есть 25 URL-адресов для очистки, вам придется делать это один за другим.

Таким образом, если для загрузки одной страницы требуется десять секунд, для загрузки этих 25 страниц потребуется более четырех минут.

import requests

# An array with 25 urls
urls = [...] 

for url in urls:
    result = requests.get(url)

Самый простой способ ускорить этот процесс — сделать несколько звонков одновременно. Это означает, что вместо последовательной отправки каждого запроса вы можете отправлять запросы пакетами по пять.

В этом случае каждый пакет будет обрабатывать пять URL-адресов одновременно, а это означает, что вы будете очищать пять URL-адресов за 10 секунд вместо 50 или весь набор из 25 URL-адресов за 50 секунд вместо 250. Неплохо для экономии времени 🥳 .

Обычно это реализуется с помощью параллелизма на основе потоков . Хотя, как всегда, создание потоков может быть сложным, особенно для новичков. К счастью, есть версия пакета Requests , которая делает всю тяжелую работу за нас — GRequests . Он основан на Requests , но также включает gevent , асинхронный API Python, широко используемый для веб-приложений. Эта библиотека позволяет нам отправлять несколько запросов одновременно простым и элегантным способом.

Для начала установим GRequests .

pip install grequests

Теперь, вот как отправить наши 25 исходных URL-адресов партиями по 5:

import grequests

BATCH_LENGTH = 5

# An array with 25 urls
urls = [...] 
# Our empty results array
results = []

while urls:
    # get our first batch of 5 URLs
    batch = urls[:BATCH_LENGTH]
    # create a set of unsent Requests
    rs = (grequests.get(url) for url in batch)
    # send them all at the same time
    batch_results = grequests.map(rs)
    # appending results to our main results array
    results += batch_results
    # removing fetched URLs from urls
    urls = urls[BATCH_LENGTH:]

print(results)
# [<Response [200]>, <Response [200]>, ..., <Response [200]>, <Response [200]>]

Вот и все. GRequests идеально подходит для небольших скриптов, но менее идеален для производственного кода или крупномасштабного веб-скрейпинга. Для этого у нас есть Scrapy 👇.

4. Среды веб-сканирования

Скрапи

Логотип Скраппи


 

Scrapy — это мощная платформа Python для веб-скрейпинга и веб-сканирования. Он предоставляет множество функций для асинхронной загрузки веб-страниц, а также обработки и сохранения их содержимого различными способами. Он поддерживает многопоточность, сканирование (процесс перехода от ссылки к ссылке для поиска каждого URL-адреса на веб-сайте), карты сайта и многое другое.

Scrapy также имеет интерактивный режим, который называется Scrapy Shell . С помощью Scrapy Shell вы можете быстро протестировать код очистки и убедиться, что все ваши выражения XPath или селекторы CSS работают без сбоев. Недостатком Scrapy является то, что кривая обучения крутая. Есть чему поучиться.

Продолжая наш пример с Hacker News, мы собираемся написать Scrapy Spider , который очищает первые 15 страниц результатов и сохраняет все в CSV-файле.

Вы можете легко установить Scrapy с помощью pip:

pip install Scrapy

Затем вы можете использовать интерфейс командной строки Scrapy для создания стандартного кода для нашего проекта:

scrapy startproject hacker_news_scraper

Внутри hacker_news_scraper/spiderмы создадим новый файл Python с кодом нашего паука:

from bs4 import BeautifulSoup
import scrapy


class HnSpider(scrapy.Spider):
    name = "hacker-news"
    allowed_domains = ["news.ycombinator.com"]
    start_urls = [f'https://news.ycombinator.com/news?p={i}' for i in range(1,16)]

    def parse(self, response):
        soup = BeautifulSoup(response.text, 'html.parser')
        links = soup.findAll('tr', class_='athing')

        for link in links:
        	yield {
        		'id': link['id'],
        		'title': link.find_all('td')[2].a.text,
        		"url": link.find_all('td')[2].a['href'],
        		"rank": int(link.td.span.text.replace('.', ''))
        	}

В Scrapy много условностей . Сначала мы предоставляем все нужные URL-адреса в формате start_urls. Затем Scrapy извлечет каждый URL-адрес и вызовет parseкаждый из них, где мы будем использовать наш собственный код для анализа файлов response.

Затем нам нужно немного настроить Scrapy , чтобы наш паук хорошо вел себя с целевым веб-сайтом.

# Enable and configure the AutoThrottle extension (disabled by default)
# See https://doc.scrapy.org/en/latest/topics/autothrottle.html
AUTOTHROTTLE_ENABLED = True

# The initial download delay
AUTOTHROTTLE_START_DELAY = 5

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

Вы можете запустить этот код с помощью интерфейса командной строки Scrapy и с различными форматами вывода (CSV, JSON, XML...):

scrapy crawl hacker-news -o links.json

Вот и все! Теперь у вас есть все ваши ссылки в красиво отформатированном файле JSON.

Можно еще многое сказать об этом Scrapy . Итак, если вы хотите узнать больше, пожалуйста, не стесняйтесь проверить наш специальный пост в блоге о парсинге веб-страниц с помощью Scrapy .

ПиПайдер

PySpider — альтернатива Scrapy, хотя и немного устаревшая. Его последний выпуск выпущен в 2018 году. Однако он по-прежнему актуален, потому что он делает много вещей, которые Scrapy не обрабатывает из коробки.

Во-первых, PySpider хорошо работает со страницами JavaScript (вызовы SPA и Ajax), потому что он поставляется с PhantomJS, библиотекой безголового просмотра. В Scrapy для этого вам потребуется установить промежуточное программное обеспечение . Кроме того, PySpider поставляется с приятным пользовательским интерфейсом, который позволяет легко отслеживать все ваши задания сканирования.

Интерфейс PySpider

Интерфейс PySpider

Однако вы все равно можете предпочесть использовать Scrapy по ряду причин:

  • Гораздо лучшая документация, чем PySpider, с простыми для понимания руководствами.
  • Встроенная система HTTP-кэширования, которая может ускорить работу поискового робота.
  • Автоматическая HTTP-аутентификация
  • Поддержка перенаправления 3XX, а также метатега обновления HTML.

5. Безголовый просмотр

Селен и Хром

Scrapy отлично подходит для крупномасштабных задач по очистке веб-страниц. Однако с ним сложно работать с сайтами, которые активно используют JavaScript и реализованы, например, как SPA (Single Page Application). Scrapy не обрабатывает JavaScript сам по себе и предоставляет вам только статический HTML-код.

Как правило, очистить SPA может быть сложно, потому что часто задействовано много вызовов AJAX и подключений WebSocket. Если производительность является проблемой, всегда проверяйте, что именно делает код JavaScript. Это означает ручную проверку всех сетевых вызовов с помощью инспектора браузера и репликацию вызовов AJAX, содержащих интересные данные.

Однако часто для получения нужных данных требуется слишком много HTTP-вызовов, и может быть проще отобразить страницу в автономном браузере. Другим отличным вариантом использования для этого было бы создание скриншота страницы, и это то, что мы собираемся сделать с домашней страницей Hacker News (нам действительно нравятся Hacker News, не так ли?) и с помощью Selenium.

❓ Эй, я не понимаю, когда мне использовать Selenium или нет?

Вот три наиболее распространенных случая, когда вам нужен Selenium:

  1. Вы ищете информацию, которая появляется через несколько секунд после загрузки веб-страницы в браузере.
  2. Веб-сайт, который вы пытаетесь очистить, использует много JavaScript.
  3. Веб-сайт, который вы пытаетесь очистить, имеет некоторую проверку JavaScript, чтобы заблокировать «классический» HTTP-клиент.

Вы можете установить пакет Selenium с помощью pip:

pip install selenium

Вам также понадобится ChromeDriver . В Mac OS для этого можно использовать brew .

brew install chromedriver

Затем нам просто нужно импортировать Webdriver из пакета Selenium, настроить Chrome с headless=True, установить размер окна (иначе оно будет очень маленьким), запустить Chrome, загрузить страницу и, наконец, получить наш красивый снимок экрана:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.headless = True
options.add_argument("--window-size=1920,1200")

driver = webdriver.Chrome(options=options, executable_path=r'/usr/local/bin/chromedriver')
driver.get("https://news.ycombinator.com/")
driver.save_screenshot('hn_homepage.png')
driver.quit()

Правда, будучи хорошими пользователями сети, мы, quit()конечно, тоже экземпляр WebDriver. Теперь вы должны получить хороший скриншот домашней страницы:

Главная страница Hacker News


 

Естественно, с помощью Selenium API и Chrome вы можете делать гораздо больше. В конце концов, это полноценный экземпляр браузера.

  • Запуск JavaScript
  • Заполнение форм
  • Щелчок по элементам
  • Извлечение элементов с помощью селекторов CSS/выражений XPath

Selenium и Chrome в безголовом режиме — идеальная комбинация для очистки всего, что вы хотите. Вы можете автоматизировать все, что вы могли бы делать с помощью обычного браузера Chrome.

Большим недостатком является то, что Chrome требует много памяти/мощности процессора. С некоторой тонкой настройкой вы можете уменьшить объем памяти до 300-400 МБ на экземпляр Chrome, но вам все равно потребуется 1 ядро ​​ЦП на экземпляр.

Не стесняйтесь ознакомиться с нашей подробной статьей о Selenium и Python .

Если вам нужно запустить несколько экземпляров одновременно, для этого потребуется компьютер с соответствующей настройкой оборудования и достаточным объемом памяти для обслуживания всех экземпляров вашего браузера. Если вам нужно более легкое и беззаботное решение, ознакомьтесь с SaaS-платформой ScrapingBee для сканирования сайтов , которая сделает за вас большую часть тяжелой работы.

РобоБраузер

RoboBrowser — это библиотека Python, которая объединяет Requests и BeautifulSoup в единый и простой в использовании пакет и позволяет вам компилировать собственные сценарии для управления рабочим процессом просмотра RoboBrowser . Это облегченная библиотека, но это не безголовый браузер и все еще имеет те же ограничения Requests и BeautifulSoup , которые мы обсуждали ранее.

Например, если вы хотите войти в Hacker-News, вместо создания запроса вручную с помощью Requests вы можете написать скрипт, который заполнит форму и щелкнет кнопку входа:

# pip install RoboBrowser
from robobrowser import RoboBrowser

browser = RoboBrowser()
browser.open('https://news.ycombinator.com/login')

# Get the signup form
signin_form = browser.get_form(action='login')

# Fill it out
signin_form['acct'].value = 'account'
signin_form['password'].value = 'secret'

# Submit the form
browser.submit_form(signin_form)

Как видите, код написан так, как если бы вы вручную выполняли задачу в реальном браузере, хотя это и не настоящая библиотека безголового просмотра.

RoboBrowser крут, потому что его легкий подход позволяет легко распараллелить его на вашем компьютере. Однако, поскольку он не использует настоящий браузер, он не сможет работать с JavaScript, например вызовами AJAX или одностраничными приложениями.

К сожалению, его документация также невелика, и я бы не рекомендовал ее новичкам или людям, которые еще не привыкли к API BeautilfulSoup или Requests .

6. Скрапинг данных Reddit

Иногда вам даже не нужно очищать данные с помощью HTTP-клиента или безголового браузера. Вы можете напрямую использовать API, предоставляемый целевым веб-сайтом. Это то, что мы собираемся попробовать сейчас с Reddit API.

Чтобы получить доступ к API, мы будем использовать Praw , отличный пакет Python, который является оболочкой Reddit API.

Чтобы установить его:

pip install praw

Затем вам нужно будет получить ключ API. Перейдите на https://www.reddit.com/prefs/apps .

Прокрутите вниз, чтобы создать приложение :

Скрапинг данных Reddit с помощью API
 

Как указано в документации Praw , обязательно укажите http://localhost:8080«URL-адрес перенаправления».

После нажатия create appзагрузится экран с информацией об API и учетными данными. Для нашего примера вам понадобится идентификатор клиента, секрет и пользовательский агент.

Скрапинг данных Reddit с помощью API


 

Теперь мы собираемся получить 1000 лучших сообщений из /r/Entrepreneur и экспортировать их в файл CSV.

import praw
import csv
reddit = praw.Reddit(client_id='you_client_id', client_secret='this_is_a_secret', user_agent='top-1000-posts')

top_posts = reddit.subreddit('Entrepreneur').top(limit=1000)

with open('top_1000.csv', 'w', newline='') as csvfile:
    fieldnames = ['title','score','num_comments','author']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for post in top_posts:
        writer.writerow({
            'title': post.title,
            'score': post.score,
            'num_comments': post.num_comments,
            'author': post.author
            })

Как видите, фактическая часть извлечения — это всего лишь одна строка кода Python. Запуск и сохранение постов в top🎉 .subreddittop_posts

Есть много других вариантов использования Praw. Вы можете делать всевозможные сумасшедшие вещи, например, анализировать субреддиты в режиме реального времени с помощью библиотек анализа настроений, предсказывать следующий $GME...

Вывод

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

Имяразъемurllib3Запросышероховатыйселен
Простота использования- - -+ ++ + ++ ++
Гибкость+ + ++ + ++ ++ + ++ + +
Скорость исполнения+ + ++ ++ ++ + ++
Общий вариант использования* Написание низкоуровневого интерфейса программирования* Приложение высокого уровня, требующее точного контроля над HTTP (pip, клиент aws, запросы, потоковая передача)* Вызов API
* Простое приложение (с точки зрения потребностей HTTP)
* Сканирование важного списка веб-сайтов
* Фильтрация, извлечение и загрузка очищенных данных
* JS-рендеринг
* Скрапинг SPA
* Автоматическое тестирование
* Программный снимок экрана
Учить больше* Официальная документация
* Отличный туториал 👍
* Официальная документация
* Использование urllib3 в PIP , очень интересно
* Официальная документация
* Запросы на использование urllib3
* Официальная документацияобзор Scrapy* Официальная документация
* Парсинг SPA

Надеюсь, вам понравился этот пост в блоге! Это было краткое введение в наиболее часто используемые инструменты Python для парсинга веб-страниц. В следующих постах мы более подробно рассмотрим все инструменты и темы, такие как селекторы XPath и CSS.

Ссылка: https://www.scrapingbee.com/blog/web-scraping-101-with-python/

#python

Все, что вам нужно знать о нулевой плате за газ с помощью Metaverse dApps

Взаимодействия метавселенной без газа — изучение децентрализованных приложений с нулевой комиссией

Хотите избежать платы за газ с помощью Metaverse dApps? Мы расскажем все, что вам нужно знать о децентрализованных приложениях с нулевой комиссией и безгазовых взаимодействиях с метавселенной!

Если вы использовали Ethereum во время пиков высокого спроса, вы знаете, насколько болезненными могут быть высокие комиссии за транзакции. Однако введение безгазовых транзакций значительно упростило ситуацию. Теперь, с постоянно расширяющейся метавселенной, как вы думаете, возможны ли безгазовые взаимодействия метавселенной? К счастью, да! Следовательно, мы хотели бы показать вам, как легко реализовать безгазовые взаимодействия метавселенной для ваших dApps. Более того, торговые площадки NFT , игры Unity Web3 и другие приложения Web3 могут стать децентрализованными приложениями с нулевой комиссией. Кроме того, это та же самая функция, которую начала внедрять OpenSea. Таким образом, теперь они предлагают безгазовые метавселенные транзакции, которые мы рассмотрим более подробно ниже.

В дальнейшем у вас будет возможность последовать нашему примеру и взяться за простой пример проекта. Таким образом, вы узнаете больше о потенциальной безгазовой метавселенной и о том, как включить эту функцию в свои dApps. Более того, вы также увидите, как совершенная платформа для разработки Web3, Moralis , значительно упрощает работу. Эта платформа « Firebase для криптографии » позволяет удовлетворить потребности серверной части, просто копируя и вставляя короткие фрагменты кода. Помимо Моралиса, мы также будем использовать два других феноменальных инструмента. Для компиляции и развертывания нашего смарт-контракта мы будем использовать Remix . Также для подключения к одному из тестовых сетей Ethereum мы будем использовать MetaMask — самый популярный кошелек Web3.. Чтобы получить максимальную отдачу от этой статьи, мы рекомендуем вам использовать код, предоставленный на GitHub , и выполнить необходимые действия самостоятельно. Тем не менее, не забудьте создать бесплатную учетную запись Moralis, прежде чем двигаться дальше.

Создание безгазовой метавселенной OpenSea

Как уже упоминалось, давайте подробнее рассмотрим, как OpenSea предлагает создателям NFT возможность ленивой чеканки NFT . На данный момент вы, вероятно, знаете, что внутрисетевые транзакции во всех цепочках сопровождаются комиссией (известной как «газ»), верно? Некоторые сети Proof-of-Stake (PoS) уже предлагают невероятно низкие комиссии за газ; однако плата за газ Ethereum остается непомерно высокой. С одной стороны, мы видим, что это хороший признак того, что цепь популярна и используется многими. Однако это тоже огромный нюанс, особенно для пользователей с ограниченным бюджетом. Теперь давайте отметим, что не существует такой вещи, как полные « безгазовые транзакции ».». Кто-то всегда должен покрывать эти расходы. Таким образом, термин «безгазовый», даже когда речь идет о «безгазовой метавселенной», ориентируется на удобные для пользователя решения. Следовательно, команда разработчиков или сторона, получающая ценность, может покрыть сборы.

Итак, как OpenSea предлагает это решение с нулевой оплатой dApps? Они сделали это возможным, позволив создателям и продавцам NFT создавать списки или продавать заказы вне сети. Это означает, что фактические транзакции не выполняются в сети во время листинга. Таким образом, в настоящее время нет необходимости в плате за газ. С учетом сказанного давайте возьмем пример NFT и посмотрим, как используется этот безгазовый аспект метавселенной. Для этой цели мы сосредоточимся на тестовой версии OpenSea, используя тестовую сеть Rinkeby.

Децентрализованные приложения с нулевой комиссией — демонстрация листинга OpenSea

Вот наш пример NFT:

Нажав кнопку «Продать», мы можем разместить NFT «Даниэль-обманщик» без каких-либо комиссий за газ. Мы должны ввести его цену и перечислить NFT, нажав кнопку «Полный список»:     

После того, как мы нажимаем кнопку «Завершить листинг», мы не выполняем транзакцию в сети. Вместо этого инициируется «транзакция» вне сети. Таким образом, параметризованный заказ должен быть подписан создателем как сообщение:

Для того, чтобы активировать кнопку «подписать», нам нужно пролистать сообщение. Затем мы можем нажать «подписать» и подтвердить наш список:

После подписания приведенного выше сообщения вы увидите следующее сообщение:

Приведенное выше сообщение появляется ненадолго и только во время подтверждения нашей подписи. Как только подпись будет подтверждена, мы получим сообщение о том, что наш NFT теперь выставлен на продажу:

Таким образом, мы успешно разместили наш пример NFT без уплаты каких-либо комиссий за газ:

Приведенный выше пример транзакции метавселенной без газа не является реальной транзакцией. Подписав сообщение MetaMask, мы лишь подтвердили создание хэша для потенциальной будущей транзакции. Кроме того, этот хеш хранился вне сети, как упоминалось выше. Более того, эта транзакция будет проходить в сети, когда кто-то купит этот NFT. Кроме того, в момент покупки покупатель, который получает стоимость, оплачивает сбор за попутный газ.  

Потенциал децентрализованных приложений с нулевой комиссией

Тот же «безгазовый» метод может использоваться другими децентрализованными приложениями с нулевой комиссией. Например, мы могли бы реализовать такую ​​стратегию в игре Web3. Итак, допустим, мы хотим предоставить игроку внутриигровой актив, для которого требуется чеканка NFT. Однако, как платформа, вы не хотите тратить деньги на газ, который сложится, если вы будете учитывать всех игроков. Следовательно, вы можете использовать что-то похожее на представленную выше тактику. Это означает, что вы создаете сообщение на своем бэкэнде и подписываете его с помощью учетной записи, находящейся под вашим контролем. Затем, наконец, предоставьте купон пользователям. Затем пользователи выкупают купон и сами оплачивают плату за газ. Конечно, мы не оставляем вам возможность самим разобраться в деталях. Вместо этого мы покажем вам, как это сделать, на нашем примере безгазовой метавселенной.  

Безгазовые взаимодействия метавселенной — пример проекта

Как упоминалось выше, пришло время показать вам, как создавать dApp с нулевой комиссией. Следовательно, мы создадим скрипт, который создает хэш сообщения и подписывает его. Обратите внимание, что в ваших играх, метавселенной и других dApps вы обычно реализуете эту функциональность в бэкэнде. Однако ради этого урока мы решили сделать это на внешнем интерфейсе. Логика позади та же. Так вы получите гораздо более четкое представление о самом процессе. 

Мы также создали шаблон смарт-контракта, который может проверять подписи и предоставлять содержимое купонов. Кроме того, поскольку мы будем делать это на внешнем интерфейсе, мы также создадим простой интерфейс, в котором пользователи смогут запрашивать свои купоны. Таким образом, это три этапа этого примера взаимодействия без газа с метавселенной:

  1. Генерация обложки купона.
  2. Разверните наш смарт-контракт «dApps с нулевой комиссией».
  3. Создайте купон, запрашивающий пользовательский интерфейс.

Безгазовые транзакции Metaverse через генерацию купонов

Как объяснялось выше, мы будем использовать виртуальные купоны, чтобы отсрочить комиссию за транзакцию. Следовательно, нам нужно генерировать купоны. Кроме того, каждый купон представляет собой комбинацию хэша нашей конкретной полезной нагрузки и подписи нашей учетной записи администратора этой полезной нагрузки. Как упоминалось ранее, вы обычно будете делать это на бэкэнде. 

Чтобы все было максимально понятно, давайте взглянем на предварительный просмотр нашего интерфейса генерации купонов:

Глядя на скриншот выше, вы можете видеть, что мы сделали все максимально простым. Есть три поля ввода. Во-первых, у нас есть «Тип объекта». Затем есть два поля рядом с «Характеристики». Тот, что слева, — это «ранг объекта», а тот, что справа — «очки урона». Эти поля могут быть любыми, что вы хотите, что ясно указано в нашем примере выше. После того, как мы введем примерные значения, мы нажимаем кнопку «Предоставить», чтобы сгенерировать купон на транзакцию метавселенной без газа. Как и в случае с демонстрацией OpenSea выше, это побуждает MetaMask запросить подпись:

Как вы можете видеть на изображении выше, наше сообщение содержит только хеш. Конечно, мы могли бы быть более творческими здесь. После нажатия на кнопку «Подписать» в нашем интерфейсе отображается тот самый хеш:

Генерация купонов для децентрализованных приложений с нулевой комиссией — пошаговое руководство по коду

Если у вас есть некоторый опыт программирования внешнего интерфейса, вы можете себе представить, что наш интерфейс генерации купонов может быть покрыт простым HTML-файлом. Для этой цели мы создали файл « index.html ». Более того, логика покрывается « logic.js ». Оба этих файла доступны на GitHub.

Генерация купонов для децентрализованных приложений с нулевой комиссией — Пошаговое руководство по коду — Интерфейс

Части, которые мы хотим выделить из нашего HTML-файла, — это строки «входных» параметров. Эта часть кода позволяет нам вводить параметры, которые служат деталями для нашей полезной нагрузки:

 <div class="input-group mb-2">
                        <span class="input-group-text">Type of Object</span>
                        <input id="objectType" type="text" class="form-control" placeholder="Input Type of Object">
                    </div>
                    <div class="input-group mb-2">
                        <span class="input-group-text">Characteristics</span>
                        <input id="objectRank" type="text" class="form-control" placeholder="Rank of Object ">
                        <input id="damagePoints" type="text" class="form-control" placeholder="Damage Points">
                        <button class="btn btn-secondary" id="grant" onclick="grantCoupon();">Grant</button>
                    </div>

Генерация купонов для децентрализованных приложений с нулевой комиссией – Пошаговое руководство по коду – Логика

Кроме того, если мы теперь сосредоточимся на логической части, она начинается с функции входа в систему:

login();
const ethers = Moralis.web3Library

async function login(){
    Moralis.Web3.enableWeb3().then(async function (){
        const chainIdHex = await Moralis.switchNetwork("0x2A");
    });
}

Вышеупомянутое инициализирует SDK Moralis , который также служит нам с провайдером Web3. Последние, в нашем случае, это Эфиры. Более того, «0x2A» по умолчанию делает нашу сеть тестовой сетью Kovan. Кроме того, еще одна важная часть нашей логики охватывается этой строкой кода:

const hash = ethers.utils.hashMessage(JSON.stringify(object));

Создав объекты Ethers.js , мы также можем получить доступ к этой библиотеке и использовать ее функции. Кроме того, эта библиотека позволяет нам использовать отличную проверенную в боевых условиях функцию хэширования сообщений. Чтобы хешировать сообщение, нам нужно преобразовать нашу полезную нагрузку в строку. После правильного хеширования мы можем подписать его. Последнее выполняется с помощью закрытого ключа или набора закрытых ключей, которые вы контролируете и можете защитить. Более того, наш интерфейс возвращает подписанные купоны, которые выдаются пользователям. Помните, что обычно вы будете делать это на бэкенде.     

Тем не менее, мы также должны отметить, что каждый купон — это не что иное, как конкатенация хэша сообщения и подписи. Разложив купоны, мы можем построить «верификационный смарт-контракт». Последний проверит, что сообщение было подписано правильной учетной записью. Более того, если это так, это вызовет определенное действие в сети. 

Пример смарт-контракта для безгазовых транзакций метавселенной

Отличным онлайн-инструментом для составления и развертывания смарт-контрактов является Remix. Поэтому мы рекомендуем вам скопировать содержимое из файла « verify.sol » и вставить его в Remix. Более того, входными данными для нашего смарт-контракта являются хэш-сообщение и подпись хеша. Мы получаем их из наших купонов. Чтобы узнать больше о нашем примере безгазового смарт-контракта метавселенной, посмотрите видео (6:45) внизу статьи. Там вы также узнаете о специальном префиксе, который Ethereum предлагает в качестве меры безопасности. Кроме того, вы узнаете, как функция «ecrecover» восстанавливает лицо, подписавшее хеш-сообщение. Конечно, вы также узнаете, как скомпилировать и развернуть наш пример смарт-контракта.

Интерфейс проверки купона

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

Вот как выглядит наш пример интерфейса:

У него есть поле ввода, куда нужно вставить хэш. Затем мы должны нажать на кнопку «Подтвердить». Кроме того, внешний вид и функциональность этой части обеспечиваются файлами « verify.html » и « logic-verify.js ». Опять же, оба этих файла находятся в вашем распоряжении на GitHub. Кроме того, хотя код HTML относительно прост, логическая часть немного сложнее. Тем не менее, благодаря Moralis установить его на место довольно просто. Тем не менее, для подробного ознакомления с кодом обратитесь к видео ниже, начиная с 10:40. Кроме того, здесь вы также узнаете, как функция «executeFunction» Moralis выполняет тяжелую работу в рамках функции «verify».

Взаимодействия метавселенной без газа — изучение децентрализованных приложений с нулевой комиссией — резюме

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

Оригинальный источник статьи на https://moralis.io

Все, что вам нужно знать об Axios

Как и Fetch API, Axios — это HTTP-клиент на основе обещаний для выполнения запросов к внешним серверам из браузера. Если вы работали с jQuery, вы, возможно, уже знаете о его $.ajax()функции, которая была популярным выбором для разработчиков внешнего интерфейса по сравнению с собственным интерфейсом XML HTTP Request (XHR). Библиотека Axios оборачивает сложный синтаксис XHR и предоставляет абстрактный и декларативный способ выполнения запросов из браузера, а также в среде узла.

Мы уже обсуждали, как мы можем делать HTTP-запросы с помощью Axios для получения данных с сервера с помощью axios.get()функции и отправки данных на сервер с помощью axios.post()функции в предыдущем руководстве. В этом руководстве мы углубимся и узнаем больше о других интересных функциях, которые предоставляет Axios.

Выполнение одновременных HTTP-запросов

Чаще всего вы будете сталкиваться со сценарием, в котором вам придется делать запросы от двух конечных точек для конкретной задачи. Предположим, что вы работаете с CMS REST API и вам необходимо получить данные текущего пользователя, а также разрешения для этого пользователя. Вероятно, вы сделаете что-то вроде того, что показано ниже:

class User extends Component {
    constructor(props) {
        super(props);
        this.state = {
            user: { 
                data: {}, 
                permissions: {} 
            }
        };
    }

    getUserData = async () => {
        try {
            const {data} = await axios.get(`${ROOT_URL}/profile/${this.props.activeUserId}`);
            return data;
        } catch (err) {
            console.log(err.message);
        }
    }

    getPermissions = async () => {
        try {
            const {data} = await axios.get(`${ROOT_URL}/permissions/${this.props.activeUserId}`);
            return data;    
        } catch (err) {
            console.log(err.message);
        }   
    }

    async componentDidMount() {
        const userData = await this.getUserData();
        const userPermissions = await this.getPermissions();
        this.setState(
            user: {
                data: userData,
                permissions: userPermissions
            }
        );
    }

    render() {
        // render the data
    }

}

Вместо того, чтобы делать запросы дважды, мы можем вызывать конечные точки одновременно, используя axios.all()функцию.

class User extends Component {
    // ...

    getUserData = () => axios.get(`${ROOT_URL}/profile/${this.props.activeUserId}`);

    getPermissions = () => axios.get(`${ROOT_URL}/permissions/${this.props.activeUserId}`);

    async componentDidMount() {
        try {
            const [userData, userPermissions] = await axios.all([ this.getUserData(), this.getPermissions() ]);
            this.setState(
                user: {
                    data: userData.data,
                    permissions: userPermissions.data
                }
            );
        }
        catch (err) {
            console.log(err.message);
        }
        
    }

    // ...
}

Обратите внимание, что я использовал async-awaitсинтаксис, чтобы сделать код более читабельным, вместо того, чтобы обрабатывать промисы с помощью .then()и .catch(). Сказав это, вам действительно решать, какой синтаксис вы предпочитаете, оба выполняют одну и ту же работу по обработке промисов.

axios.all()принимает массив запросов Axios и возвращает массив, содержащий ответы на каждый запрос Axios. catch()Проблема здесь в том, что даже если один из запросов завершается неудачей, по умолчанию все остальные запросы также завершаются ошибкой, и в блоке регистрируется ошибка из первого неудачного запроса .

Чтобы обойти эту проблему, мы можем просто возвращать null из catch()блока каждого запроса Axios. Таким образом, даже если один из запросов завершится ошибкой, он все равно будет считать axios.all()промис выполненным. Возвращаемое значение из неудачного запроса будет null, поэтому нам нужны дополнительные проверки, являются ли данные в возвращаемом массиве nullили нет.

class User extends Component {
    // ...

    getUserData = () => axios.get(`${ROOT_URL}/profile/${this.props.activeUserId}`).catch(err => null);

    getPermissions = () => axios.get(`${ROOT_URL}/permissions/${this.props.activeUserId}`).catch(err => null);

    async componentDidMount() {
        try {
            const [userData, userPermissions] = await axios.all([ this.getUserData(), this.getPermissions() ]);
            this.setState(
                user: {
                    data: userData && userData.data,
                    permissions: userPermissions && userPermissions.data
                }
            );
        }
        catch (err) {
            console.log(err.message);
        }
    }

    // ...
}

Мы можем дополнительно реорганизовать приведенный выше код следующим образом:

class User extends Component {
    constructor(props) {
        super(props);
        this.state = {
            user: { 
                data: {}, 
                permissions: {} 
            }
        };
    }

    async componentDidMount() {
        const URLs = [ `${ROOT_URL}/profile/${this.props.activeUserId}`, `${ROOT_URL}/permissions/${this.props.activeUserId}` ];
        
        const requests = URLs.map(URL => axios.get(URL).catch(err => null));

        try {
            const [userData, userPermissions] = await axios.all(requests);
            this.setState(
                user: {
                    data: userData && userData.data,
                    permissions: userPermissions && userPermissions.data
                }
            );
        }
        catch (err) {
            console.log(err.message);
        }
    }

    render() {
        // render the data
    }

}

Использование массивов из Axios Response

API часто возвращают массив, содержащий объекты данных. Например, если вы хотите получить все сообщения из вашей CMS. Чтобы использовать массив, мы должны перебрать ответ с помощью Array.map()функции, которая может быть выполнена следующим образом:

class Posts extends Component {
    constructor(props) {
        super(props);
        this.state = { posts: [] }
    }

    async componentDidMount() {
        try {
            const {data} = await axios.get(`${ROOT_URL}/posts`);
            this.setState({
                posts: data
            })
        } catch (err) {
            console.log(err.message)
        }
    }

    render() {
        return (
            <div className="container">
            {  this.state.posts && this.state.posts.length !== 0 ?
                this.state.posts.map(post => <Card title={post.title}>{post.content}</Card>) :
                <Loading/> }
            </div>
        );
    }
}

Функция Array.map()перебирает каждый элемент массива и возвращает новый массив; в нашем случае массив содержит элементы JSX, <Card />компонент. Обратите внимание, что здесь я использую сокращенную версию, более полная реализация выглядит следующим образом:

// ...
render() {
    return (
        <div className="container">
        {  this.state.posts && this.state.posts.length !== 0 ?
            this.state.posts.map((post, index) => {
                    const { title, content } = post;
                    return <Card title={title}>{content}</Card>;
                }) :
            <Loading/> }
        </div>
    );
}
//..
jsx

Для каждого элемента в массиве map()функция предоставляет нам анонимную функцию, которая принимает два аргумента: сам элемент и необязательный индексный аргумент, который содержит значение позиции текущего элемента. Мы также можем выполнить некоторое преобразование данных, прежде чем возвращать их с помощью JSX. Например, мы можем преобразовать заголовок в верхний регистр следующим образом:

// ...
this.state.posts.map((post, index) => {
    const { title, content } = post;
    const transformedTitle = title.toUpperCase();
    return <Card title={transformedTitle}>{content}</Card>;
}) 
//..

Для условного рендеринга в JSX нельзя использовать if-elseблок. Поэтому мы использовали тернарные операторы. Также обратите внимание, что когда мы пытаемся запустить приведенный выше код в браузере, мы получаем предупреждающее сообщение в консоли, в котором говорится: « Каждый дочерний элемент в массиве или итераторе должен иметь уникальный ключ».

Свойство keyиспользуется React для отслеживания элементов в массиве. В приведенном выше примере this.state.posts.map()результатом будет массив, поэтому каждый элемент JSX должен иметь связанную с ним ключевую опору. Отсутствие keyреквизита приведет к неожиданным результатам и ошибкам.

В нашем случае, если мы не укажем keyсвойство в нашем <Card />компоненте, React не будет знать, как отслеживать сообщения, и, следовательно, при изменении состояния он будет повторно отображать весь массив снова, а не обновлять изменения. Это нежелательно, поскольку это повлияет на производительность приложения. Поэтому важно иметь хотя бы одно уникальное значение ключа (в нашем случае идентификатор поста) для элемента массива.

//...
    this.state.posts.map((post, index) => {
        const { id, title, content } = post;
        return <Card key={id} title={title}>{content}</Card>;
    })
//...

Прерывание или отмена запроса Axios

Вы также можете отменить или прервать запрос, если данные вам больше не нужны. Чтобы отменить запрос, нам нужно создать токен отмены, используя CancelToken.source()фабричный метод. Допустим, мы хотим отменить запрос, когда пользователь переходит с текущей страницы на другую страницу, мы можем написать что-то вроде этого:

const NavBar = props => (
    <Nav>
        <NavItem onClick={() => props.navigate('/home') }> Home </NavItem>
        <NavItem onClick={() => props.navigate('/about') }> About </NavItem>
        <NavItem onClick={() => props.navigate('/contact') }> Contact </NavItem>
    </Nav>
)

class Posts extends Component {
    constructor(props) {
        super(props);
        this.state = { posts: [] }
    }

    navigate = url => {
        // cancel the request
        this.source.cancel('User navigated to different page');

        // assuming we are using React-Router
        this.props.history.push(url);
    }

    async componentDidMount() {
        const CancelToken = axios.CancelToken;
        // create the source
        this.source = CancelToken.source();
        try {
            const {data} = await axios.get(`${ROOT_URL}/posts`, {
                cancelToken: this.source.token
            });
            this.setState({
                posts: data
            })
        } catch (err) {
            // check if the request was cancelled
            if(axios.isCancel(err)) {
                console.log(err.message);
            }
            console.log(err.message)
        }
    }

    render() {
        return (
            <div className="container">
            <NavBar navigate={this.navigate}/>
            {  this.state.posts && this.state.posts.length !== 0 ?
                this.state.posts.map(post => <Card key={post.id} title={post.title}>{post.content}</Card>) :
                <Loading/> }
            </div>
        );
    }
}

Фабрика CancelToken.sourceпредоставляет нам два основных требования для отмены запроса Axios, токен отмены и cancel()функцию. Нам нужно передать токен отмены в качестве конфигурации в axios.get()функцию и вызывать cancel()функцию всякий раз, когда нам нужно отменить предыдущий запрос Axios. Мы можем использовать один и тот же токен отмены для нескольких запросов Axios.

Мы также можем создать токен отмены, передав executor()функцию CancelTokenконструктору.

navigate = url => {
    this.cancelRequest && this.cancelRequest('User navigated to different page');

    // assuming we are using React-Router
    this.props.history.push(url);
}

async componentDidMount() {
    const CancelToken = axios.CancelToken;
    try {
        const {data} = await axios.get(`${ROOT_URL}/posts`, {
            cancelToken: new CancelToken(function executor(c) {
                this.cancelRequest = c;
            })
        });
        this.setState({
            posts: data
        })
    } catch (err) {
        if(axios.isCancel(err)) {
            console.log(err.message);
        }
        console.log(err.message);
    }
}

Давайте рассмотрим еще один вариант использования для отмены запроса. Рассмотрим сценарий, в котором у нас есть компонент поиска, который извлекает результаты из API поиска. Когда пользователь вводит данные в поле ввода, нам нужно отменить предыдущий запрос axios.

class Search extends Component {
    constructor(props) {
        super(props);
        this.state = { value: null, results: [] };
    }

    search = async () => {
        const CancelToken = axios.CancelToken;
        try {
        const {data} = await axios.get(`${ROOT_URL}/search/q=${this.state.value}`, {
            cancelToken: new CancelToken(function executor(c) {
                this.cancelRequest = c;
            });
        });
        } catch (err) {
            if(axios.isCancel(thrown)) {
                console.log(thrown.message);
            }
            console.log(err.message)
        }
    }

    handleChange = e => {
        this.cancelRequest && this.cancelRequest();
        if(e.target.value !== "") {
            this.setState({ value: e.target.value }, async () => await this.search());
        }
    }

    render() {
        return <input type="text" onChange={this.handleChange} value={this.state.value}/>
    }
}

Здесь мы отменяем запрос при изменении значения поля ввода. В приведенном выше коде важно отметить, что мы передаем функцию обратного вызова в качестве второго параметра setState(). Это связано с тем, что состояние не изменяется мгновенно, и, следовательно, чтобы избежать любых неожиданных результатов, мы вызываем search()функцию в обратном вызове, а не вызываем ее непосредственно внутри handleChange()метода. В более реальном случае использования поисковый ввод будет отклонен, но для краткости я не включаю его здесь.

В этом руководстве мы рассмотрели различные важные варианты использования Axios и то, что это действительно отличная библиотека для выполнения HTTP-запросов в React (или любой другой среде JavaScript, такой как Vue). Я надеюсь, что вам сегодня было достаточно Axios, и вы можете проверить документацию Axios, ссылка на которую будет указана в справочных материалах.

Все, что вам нужно знать о Web3

Есть много шума о Web3. Однако что такое Web3 и как работает Web3? В этой статье мы ответим на эти вопросы!

Если вы еще этого не сделали, термин, с которым вы познакомитесь в ближайшем будущем, называется « Web3 ». Web3 знаменует собой изменение парадигмы Интернета, и его часто называют децентрализованной сетью. В настоящее время Web3 процветает, поскольку быстро разрабатываются новые dApps (децентрализованные приложения). Однако что именно влечет за собой «Web3»? Как работает Web3? И как разработчики создают децентрализованные приложения Web3? Ну, это три вопроса, на которые мы решили ответить в этой статье. Итак, если вы хотите узнать больше о децентрализованной сети, следите за нами, пока мы объясняем основные аспекты Web3. 

Интернет находится в постоянном изменении и движении по мере развития технологий. Как следует из названия, Web3 — это третий и последний крупный сдвиг парадигмы Интернета, и у него есть две предшествующие «фазы» в форме Web1 и Web2. В истории Интернета нет конкретных отметок времени, отмечающих эти сдвиги; однако они обладают уникальными определяющими характеристиками. Web1 был статичен, Web2 динамичен, а Web3 децентрализован. 

Вы, скорее всего, лучше знакомы с Web2, так как в настоящее время это доминирующая фаза Интернета. Тем не менее, Web3 быстро развивается, и это только вопрос времени, когда децентрализация возьмет верх и Web3 станет стандартом. 

Более того, Web3 набирает обороты по мере своего развития, а разработка Web3 становится все более доступной. Ярким примером является Moralis , лучшая операционная система для разработки dApp. Moralis предоставляет пользователям масштабируемую серверную инфраструктуру, позволяющую минимизировать время разработки для всех блокчейн-проектов. Операционная система также предоставляет обширный набор инструментов разработки, таких как NFT API , Speedy Nodes и Price API . Более того, Moralis — это самый простой способ создать отличный пользовательский интерфейс Web3 .

Так что, если вы хотите окунуться в Web3, Моралис — отличное место для начала! Но без лишних слов давайте попробуем ответить на вопрос «как работает Web3?

Что такое Web1 и Web2? 

Как упоминалось во введении, Интернет постоянно меняется и эволюционировал от Web1 к Web2, а теперь быстро переходит к Web3. Итак, чтобы ответить на вопрос «что такое Web3?» мы должны начать с самого начала и объяснить его предшественников.

Web1 был первой фазой Интернета, и характерной чертой этой эпохи было главным образом предоставление информации. В веб-опыте на этом этапе отсутствовали интерактивные элементы, и Интернет оставался главным источником получения информации. Таким образом, первые дни Интернета считались относительно статичными. 

С появлением социальных сетей Интернет отошел от статической природы Web1 и перешел ко второй фазе Интернета — Web2. Этот период характеризуется интерактивностью, которая сместила статичный характер в сторону более динамичного веб-опыта. Таким образом, у пользователей теперь была возможность взаимодействовать и писать свой собственный контент, а не только потреблять информацию. 

Более того, Web2 по-прежнему является преобладающей фазой, с которой сегодня знакомо большинство людей. Однако, наряду с динамичностью, еще одной преобладающей характеристикой Web2 является централизация. Централизация может быть прекрасной, но в данном случае кажется, что недостатки перевешивают преимущества. Конфиденциальность, прозрачность и единые точки отказа — это проблемы, частично возникающие из-за того, что крупные конгломераты социальных сетей накапливают огромные объемы личной информации и данных.

Эти проблемы, возникающие в результате централизованного характера Web2, являются одними из основных проблем, которые в настоящее время вызывают переход к Web3, который вместо этого фокусируется на децентрализации. Итак, что такое Web3 и как он работает? 

Что такое и как работает Web3? 

Централизация является основной проблемой текущего состояния Интернета, и недостатки, возникающие в этой структуре, являются движущей силой перехода к Web3. Поскольку источником этих проблем является централизация, логично предположить, что решение заключается в децентрализации. Таким образом, Web3 стремится создать децентрализованную сеть, в которой данные не принадлежат централизованным корпорациям или организациям, а вместо этого распределяются между пользователями.

В основе Web3 лежит блокчейн, та же технология, которая лежит в основе криптовалют и NFT (невзаимозаменяемых токенов). По этой причине люди нередко связывают Web3 с криптографией. Более того, блокчейн — это распределенная книга или база данных, которая совместно используется сетью узлов. Узлы обеспечивают безопасность сети, сохраняя неизменную запись всех транзакций и событий цепочки. Таким образом, технология блокчейна реализует основную идею Web3, которая заключается в том, чтобы хранить данные децентрализованно, а не централизованно на больших фермах серверов, как это принято в Web2. 

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

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

Как работает Web3? — децентрализованные приложения

dApps или децентрализованные приложения похожи на большинство приложений; однако, что отличает их от традиционных приложений, так это то, что они поставляются с функциональностью Web3 и блокчейна. Более того, вместо того, чтобы основываться на централизованной системе, они скорее распределены или разбросаны по множеству различных узлов в более разветвленной сети P2P на основе блокчейна. Таким образом, внутренний код для dApps существует в сетях, а не в централизованных фермах серверов. 

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

Более того, дополнительной функцией dApps является их способность иметь внутреннюю экономику токенов, что может оказаться очень полезным. Есть несколько причин, по которым dApps используют внутренние токены, и одним из примеров является механизм управления. Таким образом, можно распространять токены для управления приложением среди пользователей. Это говорит о том, что фактические пользователи голосуют за предложения по изменению dApp, делая его более демократичным. 

Если вы хотите разрабатывать децентрализованные приложения, наиболее известной цепочкой для разработки децентрализованных приложений является Ethereum . В сети размещена обширная экосистема dApps, где вы найдете инновационные и уникальные идеи. В частности, одной интересной областью является DeFi. За последние пару лет сектор DeFi значительно вырос, заложив основу для полностью децентрализованной финансовой индустрии.

Кроме того, если вы хотите узнать больше о разработке dApp, ознакомьтесь со следующим руководством о том, как создавать Ethereum dApps . Эта статья предоставит вам основу для создания собственного приложения на основе Ethereum! 

Как работает Web3? — Смарт-контакты

Наряду с dApps, еще одна важная часть, которую нам нужно объяснить, чтобы ответить на вопрос «как работает Web3?» являются смарт-контрактами . В этом случае мы возьмем этот раздел статьи, чтобы глубже погрузиться в смарт-контракты и ответить на вопрос: «Что такое смарт-контракты?». 

Смарт-контракты — это кодифицированные соглашения между двумя сторонами. Таким образом, смысл смарт-контракта остается таким же, как и у традиционных контрактов; однако основное отличие состоит в том, что код в блокчейне устанавливает условия. Кроме того, чтобы сделать объяснение смарт-контрактов более понятным, мы собираемся использовать контракты Ethereum в качестве примера. 

Все смарт-контракты Ethereum обычно состоят из двух компонентов; код и данные. Код контракта — это совокупность функций, а данные — это состояние контракта. Все смарт-контракты Ethereum находятся на определенном адресе и представляют собой особый тип учетной записи. Это дает им возможность хранить средства и совершать транзакции. Однако принципиальное различие между смарт-контрактами и обычными учетными записями заключается в том, что первые управляются кодом. 

Отличной аналогией для разъяснения и описания смарт-контрактов являются торговые автоматы, поскольку они работают аналогичным образом. Таким образом, мы можем получить желаемый результат через требуемый ввод, как в традиционном торговом автомате.

Более того, разработчики обычно пишут смарт-контракты на языке программирования Solidity . Solidity — это объектно-ориентированный язык, предназначенный для разработки смарт-контрактов, а также совместимый с другими блокчейнами на основе EVM . Однако есть исключения и для других языков, таких как Rust

Если у вас есть дальнейший интерес к смарт-контрактам и вы хотите узнать больше, не стесняйтесь более внимательно изучить следующее руководство о том, как создавать смарт-контракты

Как стать разработчиком Web3?

Если вы хотите изучить, как работает web3, скорее всего, вы хотите стать разработчиком блокчейна. Таким образом, мы воспользуемся этой возможностью, чтобы обрисовать в общих чертах наиболее важные аспекты разработки Web3 и необходимые навыки. Итак, без лишних слов, давайте узнаем, что нужно, чтобы стать разработчиком блокчейна. 

Когда дело доходит до разработки dApp, процесс можно разделить на три основные части: интерфейс, серверная часть и разработка смарт-контрактов. Итак, мы кратко рассмотрим эти три области, начиная с серверной части: 

  • Backend-разработка . Backend-разработка, по крайней мере, с традиционной точки зрения, была самой сложной частью создания Web3-приложений. Однако это уже не так, поскольку большую часть тяжелой работы за вас делает платформа Moralis. Moralis предоставляет бесконечно масштабируемую серверную инфраструктуру и готовые к использованию функциональные возможности. Таким образом, вам не нужно «изобретать велосипед», поскольку платформа обеспечивает прочную основу.
  • Фронтенд-разработка — если у вас есть опыт программирования, то вы быстро справитесь с фронтенд-разработкой блокчейна! Разработка внешнего интерфейса не сильно отличается между Web3 и Web2. Таким образом, вы можете использовать языки, которыми уже владеете, например JavaScript , HTML и CSS . Однако одно отличие состоит в том , что вам потребуются некоторые знания библиотеки Web3 web3.js.
  • Разработка смарт-контрактов. Наконец, вам также необходимо иметь возможность разрабатывать смарт-контракты. Таким образом, очень полезно изучать такие языки, как Solidity. Однако вы можете узнать больше о лучших языках для разработки блокчейнов здесь, в Moralis, если хотите. Более того, дополнительные инструменты разработки, такие как Truffle Suite , Ganache , Remix и Drizzle , могут помочь в разработке смарт-контрактов.

Как работает Web3? - Резюме

Интернет претерпевает постоянные изменения, и он пережил несколько разных «фаз». Первым этапом Интернета был Web1, время, когда пользователи в основном искали информацию в Интернете. По мере развития технологий и рождения социальных сетей Интернет превратился из относительно статичного в динамичный. Таким образом, интерактивность стала критическим аспектом работы в Интернете, позволяя людям писать свой собственный контент, а не просто получать информацию. Это вторая фаза или Web2, и именно здесь мы сейчас находимся.

Тем не менее, централизация также является общей темой в Web2, что вызывает проблемы с конфиденциальностью, едиными точками отказа, прозрачностью и т. д. Таким образом, Интернет в настоящее время претерпевает сдвиг парадигмы в сторону третьей фазы — Web3. Web3 сохраняет динамический элемент Web2, но вместо этого фокусируется на децентрализации Интернета. Это устраняет проблемы с централизацией, поскольку мы распространяем данные по более крупным сетям. 

Технология блокчейн заложила основу для децентрализации Интернета, и в настоящее время этот сектор процветает. Таким образом, это только вопрос времени, когда Web3 станет интернет-стандартом. Более того, двумя дополнительными важными аспектами Web3 являются dApps и смарт-контракты. Новые dApps постоянно разрабатываются, а разработка Web3 — один из самых популярных секторов в мире программирования. Таким образом, у тех, кто хочет заняться разработкой dApp, есть бесконечные возможности. 

Оригинальный источник статьи на https://moralis.io