<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>bomb diggity</title><author><name>bomb diggity</name></author><id>https://teletype.in/atom/nodiggity</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/nodiggity?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@nodiggity?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nodiggity"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/nodiggity?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-04T03:48:00.333Z</updated><entry><id>nodiggity:U11opzC3qpj</id><link rel="alternate" type="text/html" href="https://teletype.in/@nodiggity/U11opzC3qpj?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nodiggity"></link><title>Arkham часть 1. (Top 100 holders LayerZero)</title><published>2024-06-30T13:09:32.753Z</published><updated>2024-07-01T06:14:33.757Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/59/81/59811083-fab6-4220-a51c-d1d210d1f3c3.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/16/7e/167ef0c9-be1c-4c8c-97fb-bf2d63d70800.png&quot;&gt;1.1 Перехожу в личный кабинет, раздел - мои панели.</summary><content type="html">
  &lt;figure id=&quot;sNI8&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/16/7e/167ef0c9-be1c-4c8c-97fb-bf2d63d70800.png&quot; width=&quot;626&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;w5GW&quot;&gt;1. Создание панели мониторинга. &lt;/h3&gt;
  &lt;p id=&quot;aB7c&quot;&gt;1.1 Перехожу в личный кабинет, раздел - мои панели.&lt;/p&gt;
  &lt;figure id=&quot;eMJr&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6c/89/6c89a329-147b-45c6-9d5f-3bae791359c3.png&quot; width=&quot;1393&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;7E63&quot;&gt;1.2 Создать панель.&lt;/p&gt;
  &lt;figure id=&quot;lWGi&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/42/07/4207dc19-9474-424b-af31-455dd79b9e92.png&quot; width=&quot;348&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;bYCc&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/56/a3/56a3d94c-b766-4104-8cf0-0735985357ca.png&quot; width=&quot;863&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;bWmZ&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/91/f4/91f45e83-113a-411e-a8df-ef985cbc40ec.png&quot; width=&quot;783.8040712468194&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;t9KL&quot;&gt;1.3 Нахожу панель с холдерами. &lt;/p&gt;
  &lt;figure id=&quot;lLDT&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a8/de/a8deeea1-b2c7-4a10-922a-c050392720f2.png&quot; width=&quot;1105&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;t2Vd&quot;&gt;1.4 Настраиваю под нужный токен.&lt;/p&gt;
  &lt;figure id=&quot;8tQw&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/53/4c/534cb6eb-dde2-4381-b399-847ecff45745.png&quot; width=&quot;989&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;pEB7&quot;&gt;1.4.1 В правой части, выбираю размер информационной панели. &lt;/p&gt;
  &lt;figure id=&quot;bRbd&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/52/87/528710d0-bc3e-4b5b-8e2b-02601ba09047.png&quot; width=&quot;993.3835616438356&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;jN7p&quot;&gt;1.5 Наша панель ZRO холдеров создана.&lt;/p&gt;
  &lt;figure id=&quot;fV2S&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/fe/0c/fe0c545c-accb-4788-af81-a85f333c92bd.png&quot; width=&quot;984&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;EYb8&quot;&gt;&lt;/h3&gt;
  &lt;h3 id=&quot;hLIg&quot;&gt;2. Анализ данных.&lt;/h3&gt;
  &lt;p id=&quot;AoWJ&quot;&gt;&lt;em&gt;Некоторым кошелькам, аркхам автоматически присваивает метки принадлежности. Создам таблицу эксель и занесу топ 100 адресов, разделю по категориям (кошельки проекта, маркет мейкеры/биржи, х - кошельки.&lt;/em&gt;&lt;/p&gt;
  &lt;figure id=&quot;yiUs&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/49/11/4911ad55-c983-46a4-992d-4bee3230dc68.png&quot; width=&quot;1029&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;4eeu&quot;&gt;&lt;em&gt;На примере кошелька Gnosis Safe Proxy (0x806f68Bb6ce8f3100D4745C8b13b36e4f40D8431)&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;JGmI&quot;&gt;&lt;a href=&quot;https://platform.arkhamintelligence.com/explorer/address/0x806f68Bb6ce8f3100D4745C8b13b36e4f40D8431&quot; target=&quot;_blank&quot;&gt;https://platform.arkhamintelligence.com/explorer/address/0x806f68Bb6ce8f3100D4745C8b13b36e4f40D8431&lt;/a&gt;&lt;/p&gt;
  &lt;figure id=&quot;qj1m&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a0/91/a091e148-936c-4f97-952a-e100b44fc0c5.png&quot; width=&quot;1029&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;GT8V&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/94/74/9474851b-431d-40b6-a035-aa4ca7bb5f54.png&quot; width=&quot;999.4545454545454&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;XXBm&quot;&gt;&lt;a href=&quot;https://etherscan.io/tx/0x9f4c16f296f5ea5576496a4c4eaff7cf2411fb23baabd40c85844c45ac6e0b18&quot; target=&quot;_blank&quot;&gt;https://etherscan.io/tx/0x9f4c16f296f5ea5576496a4c4eaff7cf2411fb23baabd40c85844c45ac6e0b18&lt;/a&gt;&lt;/p&gt;
  &lt;figure id=&quot;rrca&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a9/e1/a9e1a9f7-5bf5-4737-a110-600767e3e0da.png&quot; width=&quot;825.0259259259259&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;48WO&quot;&gt;&lt;em&gt;Как видим в &lt;strong&gt;Tokens Transferred: 23 адреса.&lt;/strong&gt; В таблице каждый батч отмечаю своим цветом.&lt;/em&gt;&lt;/p&gt;
  &lt;figure id=&quot;1nEp&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a0/34/a034e60c-dc57-4bab-a7ae-bae9a275cf0a.png&quot; width=&quot;435.09677419354836&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;DMSD&quot;&gt;&lt;em&gt;Таким образом формирую группы: 1) кошельки LZ, отдельным цветом отмечаю биржи, мм, кошельки Airdrop и AptosAirdropZRO. 9 адресов из 100, отобрал в категорию неизвестных кошельков X-address, к ним и перейдем.&lt;/em&gt;&lt;/p&gt;
  &lt;figure id=&quot;yXYL&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5f/cf/5fcf2ba3-6373-4bd5-be98-214016fc65b7.png&quot; width=&quot;674&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;7iYY&quot;&gt;3. X - address&lt;/h3&gt;
  &lt;p id=&quot;LrsR&quot;&gt;Общие данные: на 29.06.24 топ&lt;strong&gt; 100 кошельков&lt;/strong&gt; - владеют 95,48% всего саплая, *без учета airdrop кошельков - 93,49% В локе 70 из топ 100 и на их долю приходится 88,6%&lt;/p&gt;
  &lt;figure id=&quot;yb2M&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/65/28/6528fad1-6c1e-47be-a069-93618c9a2327.png&quot; width=&quot;710&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;tI0v&quot;&gt;Х кошельки - 9 из топ 100, на их долю приходится 9M токенов, 0,9% от всех токенов (10,5% от 85M)&lt;/p&gt;
  &lt;figure id=&quot;oJh9&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/db/e2/dbe2922a-6106-4dcb-b13e-7e149cdd752b.png&quot; width=&quot;561.4878892733564&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;cyGw&quot;&gt;&lt;strong&gt;1) 0x63be42b40816eB08F6Ea480e5875E6F4668da379&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;bZ0I&quot;&gt;Переходим в &lt;a href=&quot;https://platform.arkhamintelligence.com/visualizer/entity/0x63be42b40816eB08F6Ea480e5875E6F4668da379?flow=all&amp;positions=%7B%7D&amp;sortDir=desc&amp;sortKey=time&amp;usdGte=0.1&quot; target=&quot;_blank&quot;&gt;визуализатор&lt;/a&gt;: &lt;/p&gt;
  &lt;figure id=&quot;3H8H&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2b/2f/2b2f835f-b83f-4fc8-b9fb-65c0d8462bcf.png&quot; width=&quot;801&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;hYGD&quot;&gt;&lt;em&gt;Среди множества зеленых линий входящих транзакций, есть красная линия - отток средств.&lt;/em&gt;&lt;/p&gt;
  &lt;figure id=&quot;AT1E&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/14/94/149461b5-fa14-46c4-891e-edb995a7daea.png&quot; width=&quot;445&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;9cMv&quot;&gt;Кошельку 16 дней, в сети эфира аккумулирует ZRO крупными суммами из других 6 кошельков. *На кошельке только токены ZRO и эфира.&lt;/p&gt;
  &lt;figure id=&quot;thRb&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/94/be/94be6a9d-239b-4b6b-ae2a-5be8a6ce76df.png&quot; width=&quot;445&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;4GKG&quot;&gt;Во вкладке дополнительной информации, возможна фильтрация переводов.&lt;/p&gt;
  &lt;figure id=&quot;MiPV&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/da/58/da58a1dc-1e29-4a2b-8625-806313610d2a.png&quot; width=&quot;954&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;vGVp&quot;&gt;&lt;em&gt;И была одна транзакция на вывод в обратную сторону. В общем, имеет смысл кошелек поставить на алерт и наблюдать за ним дальше. &lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;4yip&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;E1gC&quot;&gt;&lt;strong&gt;2) 0x8dB0f952B8B6A462445C732C41Ec2937bCae9c35&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;68zX&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6d/24/6d24d074-0608-4e9f-bfb9-56c219f5bf65.png&quot; width=&quot;782&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;mtZM&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ab/b7/abb7d6f9-e76e-4700-ac99-e6accda9bd38.png&quot; width=&quot;942&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;zUi6&quot;&gt;&lt;em&gt;Несколько тысяч пополнений небольшими суммами, все в сети base.&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;8Faq&quot;&gt;&lt;a href=&quot;https://platform.arkhamintelligence.com/explorer/address/0x8dB0f952B8B6A462445C732C41Ec2937bCae9c35&quot; target=&quot;_blank&quot;&gt;https://platform.arkhamintelligence.com/explorer/address/0x8dB0f952B8B6A462445C732C41Ec2937bCae9c35&lt;/a&gt;&lt;/p&gt;
  &lt;figure id=&quot;ZR5l&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/43/a1/43a1d837-e331-400a-a50f-be90bfa20fde.png&quot; width=&quot;945&quot; /&gt;
    &lt;figcaption&gt;Tранзакции оттока.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;S3BZ&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;vQZJ&quot;&gt;&lt;strong&gt;3) 0x25681Ab599B4E2CEea31F8B498052c53FC2D74db&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;VQj7&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9a/fc/9afcca22-0a2b-40aa-9ea5-b5a42ffc0b16.png&quot; width=&quot;935&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;KxgN&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8b/ac/8bac4574-81cd-4ebf-8b4f-498d0817029a.png&quot; width=&quot;933&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;So3t&quot;&gt;&lt;a href=&quot;https://platform.arkhamintelligence.com/explorer/address/0x25681Ab599B4E2CEea31F8B498052c53FC2D74db&quot; target=&quot;_blank&quot;&gt;https://platform.arkhamintelligence.com/explorer/address/0x25681Ab599B4E2CEea31F8B498052c53FC2D74db&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;kN0E&quot;&gt;&lt;em&gt;Кошельку 10 дней и аркхам никак его не индефицирует, я отнесу его к Binance, т.к. массовое пополнение с бинанса. &lt;/em&gt;&lt;/p&gt;
  &lt;figure id=&quot;jDZK&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0c/82/0c8234ac-9a40-44cf-935e-18f4b3406ee3.png&quot; width=&quot;908&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;9ELN&quot;&gt;&lt;em&gt;И прием средств происходит каждую минуту.&lt;/em&gt;&lt;/p&gt;
  &lt;figure id=&quot;Tw28&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/86/09/8609193c-e5ba-47f9-97b0-4dfe938cab9f.png&quot; width=&quot;871&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;c9H3&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;pPNJ&quot;&gt;&lt;strong&gt;4) 0x3348984E9285b4A214bF098573918b2D69172517&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;WvM4&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ac/1e/ac1ef897-1750-49c6-8bff-ef14d901a13b.png&quot; width=&quot;1050&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;hxqR&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/23/92/2392d52e-f3f9-4e7c-94a3-8e9208648b9d.png&quot; width=&quot;949&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;Ci4X&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/ce/ed/ceed28a0-ca20-4d59-9e1c-f8cae9036832.png&quot; width=&quot;973&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;rs5s&quot;&gt;&lt;a href=&quot;https://platform.arkhamintelligence.com/explorer/address/0x3348984E9285b4A214bF098573918b2D69172517&quot; target=&quot;_blank&quot;&gt;https://platform.arkhamintelligence.com/explorer/address/0x3348984E9285b4A214bF098573918b2D69172517&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;uAa9&quot;&gt;&lt;em&gt;Высокий отток, вероятно временный кошелек, но на балансе все еще &amp;gt;500к Zro.&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;IzoJ&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;DCoK&quot;&gt;&lt;strong&gt;5) 0x3931dAb967C3E2dbb492FE12460a66d0fe4cC857&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;qK8i&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/34/e4/34e40eb1-992b-42e7-b974-4a8a75a3ba93.png&quot; width=&quot;950&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;EdTV&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/49/0a/490a3f46-16ac-45d7-83f2-fddfc65a57a9.png&quot; width=&quot;946&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;TFo3&quot;&gt;&lt;a href=&quot;https://platform.arkhamintelligence.com/explorer/address/0x3931dAb967C3E2dbb492FE12460a66d0fe4cC857&quot; target=&quot;_blank&quot;&gt;https://platform.arkhamintelligence.com/explorer/address/0x3931dAb967C3E2dbb492FE12460a66d0fe4cC857&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;IcG6&quot;&gt;&lt;em&gt;Также как кошелек №3 создан 10 дней назад, пополнение с Binance.&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;oW07&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;QzLv&quot;&gt;&lt;strong&gt;6) 0xf3cCBf6537CB1fD3fDB72E3b1909Ab58B29CDAFA&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;YFc7&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/22/a7/22a7f525-acc8-4546-ab62-7f156a0f5318.png&quot; width=&quot;970.0000000000001&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;jIqU&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ef/fe/effeb1c0-d37b-410b-898c-8f47e4b4e492.png&quot; width=&quot;918&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;GMog&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7a/74/7a7489ec-0998-49a6-8889-0046b0f84e95.png&quot; width=&quot;917&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;O5j6&quot;&gt;&lt;a href=&quot;https://platform.arkhamintelligence.com/explorer/address/0xf3cCBf6537CB1fD3fDB72E3b1909Ab58B29CDAFA&quot; target=&quot;_blank&quot;&gt;https://platform.arkhamintelligence.com/explorer/address/0xf3cCBf6537CB1fD3fDB72E3b1909Ab58B29CDAFA&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;LXMj&quot;&gt;&lt;em&gt;Кошельку 12 дней, связь с Wintermute и Galaxy Digital.&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;l2VE&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;SWc5&quot;&gt;&lt;strong&gt;7) 0x4680900FB91164Ee22b9E8f7c66efc79D7C4E1f9&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;7BOr&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/70/23/7023c170-5817-44b1-b2db-8364797c22a0.png&quot; width=&quot;980&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;VuAw&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/33/17/3317b2c0-4b23-47bd-af41-c4677e618e68.png&quot; width=&quot;926&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;UIOO&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/56/54/5654e19d-881f-4bf4-92c7-e9f1c90386c9.png&quot; width=&quot;922&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;7I3S&quot;&gt;&lt;a href=&quot;https://platform.arkhamintelligence.com/explorer/address/0x4680900FB91164Ee22b9E8f7c66efc79D7C4E1f9&quot; target=&quot;_blank&quot;&gt;https://platform.arkhamintelligence.com/explorer/address/0x4680900FB91164Ee22b9E8f7c66efc79D7C4E1f9&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;APny&quot;&gt;&lt;em&gt;Высокий показатель оттока, пока под наблюдением. Источник притока вызывает интерес. &lt;/em&gt;&lt;/p&gt;
  &lt;figure id=&quot;wMXb&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/13/78/1378a0d3-5ad3-40e2-b420-9347f9197092.png&quot; width=&quot;850&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;dmNg&quot;&gt;Поступление &lt;strong&gt;$1,71M&lt;/strong&gt; (499,999 ZRO) &lt;/p&gt;
  &lt;p id=&quot;DYtZ&quot;&gt;&lt;a href=&quot;https://etherscan.io/tx/0x155363a5eae943a44cb44b35508df091f0d1522b398470f825c57cc5d3903667&quot; target=&quot;_blank&quot;&gt;https://etherscan.io/tx/0x155363a5eae943a44cb44b35508df091f0d1522b398470f825c57cc5d3903667&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;EbAU&quot;&gt;от &lt;strong&gt;0x0d88d7a4Ca8826A7F8bcAE5650386a6dB8c5ce6e&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;sC67&quot;&gt;В свою очередь на этот адрес 0x0d88d7a4Ca8826A7F8bcAE5650386a6dB8c5ce6e был приток в&lt;strong&gt; 1M&lt;/strong&gt; &lt;strong&gt;zro&lt;/strong&gt; &lt;/p&gt;
  &lt;figure id=&quot;JJBg&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e1/18/e118911f-72f5-4b76-bacf-bd97b36ecc34.png&quot; width=&quot;949&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;k6hJ&quot;&gt;&lt;strong&gt;Поступление 500К&lt;/strong&gt; от 0x3348984E9285b4A214bF098573918b2D69172517 это наш адрес под &lt;a href=&quot;#pPNJ&quot;&gt;№4&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;LgOn&quot;&gt;&lt;a href=&quot;https://arbiscan.io/tx/0x492c927e2a8b8b574c83859436c3444b6167027361c126dda4fb36257de3800e&quot; target=&quot;_blank&quot;&gt;https://arbiscan.io/tx/0x492c927e2a8b8b574c83859436c3444b6167027361c126dda4fb36257de3800e&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;wzC1&quot;&gt;&lt;strong&gt;Поступление 200к&lt;/strong&gt; от 0xe89792360C32b3fa9BaACFc577b809000f6D0c24&lt;/p&gt;
  &lt;p id=&quot;IvWz&quot;&gt;&lt;a href=&quot;https://platform.arkhamintelligence.com/explorer/tx/0x98e96fbc5f4651015b139c0606f15255d0eadca4277f5ceae88364c7f2c2ed53&quot; target=&quot;_blank&quot;&gt;https://platform.arkhamintelligence.com/explorer/tx/0x98e96fbc5f4651015b139c0606f15255d0eadca4277f5ceae88364c7f2c2ed53&lt;/a&gt;&lt;/p&gt;
  &lt;figure id=&quot;SaEU&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/03/f1/03f1d087-9ec2-49be-8628-9b7f67bd5c4f.png&quot; width=&quot;970&quot; /&gt;
    &lt;figcaption&gt;приток на адрес 0xe89792360C32b3fa9BaACFc577b809000f6D0c24&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;KRUp&quot;&gt;&lt;strong&gt;Поступление 300к&lt;/strong&gt; от 0x0Af5fe66F56FAbbde7e9C0fB54898A64B325070C&lt;/p&gt;
  &lt;p id=&quot;rcYT&quot;&gt;&lt;a href=&quot;https://etherscan.io/tx/0x3b68886a1e259ce8139eae53839fe0a7a129d3a4126a5dc66b0384198e5e8f43&quot; target=&quot;_blank&quot;&gt;https://etherscan.io/tx/0x3b68886a1e259ce8139eae53839fe0a7a129d3a4126a5dc66b0384198e5e8f43&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;8uqX&quot;&gt;Поступление на адрес 0x0Af5fe66F56FAbbde7e9C0fB54898A64B325070C&lt;/p&gt;
  &lt;figure id=&quot;sKsu&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/38/cb/38cb5b07-5794-4f90-b655-fc7d786553ff.png&quot; width=&quot;950&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;WXpw&quot;&gt;Оба адреса aркхам относит к L0 &lt;/p&gt;
  &lt;figure id=&quot;u3JS&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e6/ad/e6adfbfd-15bf-428b-93a9-eabd8035388e.png&quot; width=&quot;626&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ENFa&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Nf9n&quot;&gt;&lt;strong&gt;8) 0x64440d8A6E6F949536646C363A4b734819EeDbfd&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;iJyh&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/11/cf/11cf48cc-539f-4c72-95a5-2703dfcb1ef3.png&quot; width=&quot;672&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;sQpA&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/61/e3/61e33535-a17e-4ec5-80f6-363d11f9be48.png&quot; width=&quot;926&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;JEHV&quot;&gt;&lt;a href=&quot;https://platform.arkhamintelligence.com/explorer/address/0x64440d8A6E6F949536646C363A4b734819EeDbfd&quot; target=&quot;_blank&quot;&gt;https://platform.arkhamintelligence.com/explorer/address/0x64440d8A6E6F949536646C363A4b734819EeDbfd&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;pIYt&quot;&gt;&lt;em&gt;Весь приток c Paribu Deposit&lt;/em&gt;&lt;/p&gt;
  &lt;figure id=&quot;a5LX&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/db/d1/dbd16fa0-1b76-438a-8213-47ae822c9205.png&quot; width=&quot;933&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;QC9L&quot;&gt;&lt;em&gt;Исходящие транзакции уже на разные биржи и кошельки.&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;xqP7&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;01WP&quot;&gt;&lt;strong&gt;9) 0xaa7C42fBC45396d94Ee2fbF7F37c4f05db3E3cE4&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;ij4K&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c9/56/c956f1b5-b54d-4859-90e8-fc98cfbdef7b.png&quot; width=&quot;1003&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;1QAT&quot;&gt;&lt;a href=&quot;https://platform.arkhamintelligence.com/explorer/address/0xaa7C42fBC45396d94Ee2fbF7F37c4f05db3E3cE4&quot; target=&quot;_blank&quot;&gt;https://platform.arkhamintelligence.com/explorer/address/0xaa7C42fBC45396d94Ee2fbF7F37c4f05db3E3cE4&lt;/a&gt;&lt;/p&gt;
  &lt;figure id=&quot;hfDK&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6a/c7/6ac710ee-aa0b-4b5b-841c-087a9c80e193.png&quot; width=&quot;925&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;fXLy&quot;&gt;&lt;em&gt;Накапливает zro по 40-50к $, остается под наблюдением дальше.&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;KG1c&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;LWAu&quot;&gt;4. Alerts&lt;/h3&gt;
  &lt;p id=&quot;xzhJ&quot;&gt;Из девяти, отсеялось три кошелька, два Binance и один за связь с Wintermute и Galaxy Digital. &lt;/p&gt;
  &lt;figure id=&quot;DqJc&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/fe/95/fe9551f4-0d42-478a-bff8-ffc8efae0940.png&quot; width=&quot;618&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;87Fo&quot;&gt;За кошельками планирую понаблюдать, иду в оповещения - &amp;gt; создать оповещение.&lt;/p&gt;
  &lt;figure id=&quot;l9u6&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/fd/99/fd99d457-417a-4b4d-857b-9a0acb10e106.png&quot; width=&quot;863&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;xKaW&quot;&gt;Добавляю 6 кошельков, фильтр на объем от 100к$ и добавляю оповещение в телеграм группу.&lt;/p&gt;
  &lt;figure id=&quot;855Y&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/31/5e/315efb0d-7262-49f6-a625-2addf010f984.png&quot; width=&quot;1046&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;yjbO&quot;&gt;Тоже самое делаю с категорией: биржи и маркет мейкеры.&lt;/p&gt;
  &lt;figure id=&quot;YurG&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1b/16/1b16f0e8-da9a-4419-85af-b6a08bdcd060.png&quot; width=&quot;1050&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;9vWu&quot;&gt;Чтобы не перенасыщать бота уведомлениями, объем транзакции меняю - на 500k zro и выше.&lt;/p&gt;
  &lt;p id=&quot;Ppub&quot;&gt;Дальше создаю Locklist Zro. (70 кошельков LZ из топ 100) Мне интересно насколько эти токены недвижимы. &lt;/p&gt;
  &lt;figure id=&quot;iqv2&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/bc/ce/bcce6478-7173-4b88-baca-0aebe9710304.png&quot; width=&quot;1036&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;mTB8&quot;&gt;Заодно добавил алерт на топ хантеров, уведомление составил из двух списков. &lt;/p&gt;
  &lt;p id=&quot;YOH6&quot;&gt;1) Всеми известная &lt;a href=&quot;https://dune.com/cypherpepe/airdrops-and-wallets-v2#matapac&quot; target=&quot;_blank&quot;&gt;дюна&lt;/a&gt; &lt;a href=&quot;https://twitter.com/matapac_izi&quot; target=&quot;_blank&quot;&gt;Matapac&lt;/a&gt; и &lt;a href=&quot;https://twitter.com/cypher_frog&quot; target=&quot;_blank&quot;&gt;CypherPepe&lt;/a&gt; - в аркхаме &lt;a href=&quot;https://platform.arkhamintelligence.com/dashboards/view?dashboardID=ede805b3-26b2-4171-a020-4579885ea0ac&quot; target=&quot;_blank&quot;&gt;Dashboard&lt;/a&gt; по этой дюне от &lt;a href=&quot;https://t.me/retrodropsdao&quot; target=&quot;_blank&quot;&gt;t.me/retrodropsdao &lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;bcob&quot;&gt;2) Список от &lt;a href=&quot;https://x.com/lookonchain/status/1800558351660773632?s=12&amp;t=Um4W6MZZLWUHWogGCHasiA&quot; target=&quot;_blank&quot;&gt;Lookonchain&lt;/a&gt;&lt;/p&gt;
  &lt;figure id=&quot;Qe86&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/16/c5/16c5fd7e-10e4-430a-9fba-1e20a7afc0b1.png&quot; width=&quot;1113&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;pPNQ&quot;&gt;И дополню бота алертом на объемы от 800M $ по эфиру и бтс.&lt;/p&gt;
  &lt;figure id=&quot;fFnm&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d8/61/d861b029-7f45-403c-bd04-32b1bcf6de4b.png&quot; width=&quot;1166&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ugV2&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;rrOu&quot;&gt;Вывод: &lt;/h3&gt;
  &lt;p id=&quot;t8Nq&quot;&gt;Аркхам вполне удобный инструмент мониторинга и анализа данных (&lt;a href=&quot;https://docs.google.com/spreadsheets/d/1hkuJNYob5sSbuFVSvKKi_pOQTumRSl3LTK6GS3dmHos/edit?usp=sharing&quot; target=&quot;_blank&quot;&gt;link&lt;/a&gt; на таблицу) гибкий в настройках уведомлений и создания дашбордов. Рассмотрели общую картину холдеров, создали телеграм &lt;a href=&quot;https://t.me/titdiggity&quot; target=&quot;_blank&quot;&gt;бота&lt;/a&gt; со следующими категориями алертов: 1) &lt;strong&gt;Whitelist ZRO&lt;/strong&gt; - состоит из маркет мейкеров, бирж с потоком от 500к zro (Х-кошельков с транзакциями от 100к$ также при обнаружении, будут добавляться новые адреса. 2)&lt;strong&gt; Locklist Zro&lt;/strong&gt; (70 кошельков LZ из топ 100) 3) &lt;strong&gt;Grand Hunters&lt;/strong&gt; - топ хантеры из двух списков, с объемами &amp;gt; 10к$ 4)&lt;strong&gt; EPIC (ETH &amp;amp; BTC)&lt;/strong&gt; - редкие движения тяжеловесных переводов от 800M$. &lt;/p&gt;

</content></entry><entry><id>nodiggity:AjLyPAogLJO</id><link rel="alternate" type="text/html" href="https://teletype.in/@nodiggity/AjLyPAogLJO?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nodiggity"></link><title>Смарт-контракт с использованием zk-SNARKs</title><published>2024-02-03T12:46:51.352Z</published><updated>2024-02-06T07:42:47.050Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/34/b6/34b642ef-c677-409d-948f-a6c556a32bc3.png"></media:thumbnail><category term="smart-kontrakty" label="Смарт-контракты"></category><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/6a/28/6a28d5ea-851d-493f-8f04-83df472772c4.jpeg&quot;&gt;Например, у нас есть секретная информация, скажем, пароль. Мы хотим доказать другому человеку, что у нас есть этот пароль, но не хотим раскрывать сам пароль. С использованием zk-SNARK, мы сможем сгенерировать доказательство, подтверждающее, что у нас есть знание о пароле, но при этом сам пароль будет оставаться скрытым. Это обеспечит доказуемую аутентификацию без необходимости раскрывать секретную информацию.</summary><content type="html">
  &lt;p id=&quot;YLPq&quot;&gt;Например, у нас есть секретная информация, скажем, пароль. Мы хотим доказать другому человеку, что у нас есть этот пароль, но не хотим раскрывать сам пароль. С использованием &lt;a href=&quot;https://ethereum.org/en/zero-knowledge-proofs&quot; target=&quot;_blank&quot;&gt;zk-SNARKs&lt;/a&gt;, мы сможем сгенерировать доказательство, подтверждающее, что у нас есть знание о пароле, но при этом сам пароль будет оставаться скрытым. Это обеспечит доказуемую аутентификацию без необходимости раскрывать секретную информацию.&lt;/p&gt;
  &lt;blockquote id=&quot;R0gC&quot;&gt;Поскольку смарт-контракты могут раскрывать значения, а нам необходимо хранить пароль в секрете. Для этого обратимся к ZoKrates.&lt;/blockquote&gt;
  &lt;figure id=&quot;aS64&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6a/28/6a28d5ea-851d-493f-8f04-83df472772c4.jpeg&quot; width=&quot;564.4212840809147&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;LGOq&quot;&gt;&lt;a href=&quot;https://zokrates.github.io/introduction.html&quot; target=&quot;_blank&quot;&gt;ZoKrates&lt;/a&gt; - набор инструментов которые упрощает разработку и развертывание программ доказательства с нулевым разглашением, специально разработанных для использования на Ethereum. &lt;/p&gt;
  &lt;p id=&quot;9LSq&quot;&gt;&lt;strong&gt;Варианты использования:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;J6v6&quot;&gt;
    &lt;li id=&quot;zrbh&quot;&gt;Плагин в Remix IDE предоставляет создание и верификацию zk-SNARKs. &lt;/li&gt;
    &lt;li id=&quot;qgKt&quot;&gt;&lt;a href=&quot;https://play.zokrat.es/&quot; target=&quot;_blank&quot;&gt;ZoKrates Playground &lt;/a&gt;- веб-игровая площадка, где разработчики могут писать и компилировать программы онлайн. Playground включает в себя редактор кода, компилятор и инструменты для создания и проверки доказательств.&lt;/li&gt;
    &lt;li id=&quot;gyW5&quot;&gt;Установить ZoKrates локально с помощью менеджеров пакетов, таких как npm, или загрузив двоичный файл непосредственно из &lt;a href=&quot;https://github.com/ZoKrates/ZoKrates/&quot; target=&quot;_blank&quot;&gt;репозитория ZoKrates GitHub.&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;cadf&quot;&gt;Контейнер Docker: ZoKrates также предоставляет контейнер Docker, который можно использовать для запуска программ ZoKrates в виртуализированной среде. Эта опция полезна для разработчиков, которые не хотят устанавливать ZoKrates локально и предпочитают использовать стандартизированную среду. &lt;code&gt;docker run -ti zokrates/zokrates /bin/bash&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;AMPc&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;0NAs&quot;&gt;&lt;strong&gt;Технические особенности:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;38Kj&quot;&gt;
    &lt;li id=&quot;f1c9&quot;&gt;ZoKrates — использует программы на предметно-ориентированном языке (&lt;a href=&quot;https://zokrates.github.io/language/variables.html&quot; target=&quot;_blank&quot;&gt;DSL&lt;/a&gt;) высокого уровня.&lt;/li&gt;
    &lt;li id=&quot;2b50&quot;&gt;ZoKrates DSL похож на язык программирования C (Си) включает переменные, циклы и условные операторы.&lt;/li&gt;
    &lt;li id=&quot;7203&quot;&gt;Использует &lt;a href=&quot;https://github.com/Zokrates/libsnark&quot; target=&quot;_blank&quot;&gt;libsnark&lt;/a&gt;, библиотеку C++ zkSNARKs, для генерации доказательств и ключей проверки.&lt;/li&gt;
    &lt;li id=&quot;b297&quot;&gt;Поддерживает криптографию на основе &lt;a href=&quot;https://electriccoin.co/blog/snark-explain7/&quot; target=&quot;_blank&quot;&gt;эллиптических кривых&lt;/a&gt;, модульную арифметику, хеш-функции и другие криптографические операции.&lt;/li&gt;
    &lt;li id=&quot;29c9&quot;&gt;Использует систему доказательств &lt;a href=&quot;https://xn--2-umb.com/22/groth16/&quot; target=&quot;_blank&quot;&gt;Groth16&lt;/a&gt; для быстрого и эффективного создания и проверки ZKP.&lt;/li&gt;
    &lt;li id=&quot;00e0&quot;&gt;Имеет лицензию MIT и представляет собой проект с открытым исходным кодом.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;blockquote id=&quot;O1qa&quot; data-align=&quot;right&quot;&gt;&lt;a href=&quot;https://github.com/Zokrates/ZoKrates/blob/0.8.8/CHANGELOG.md&quot; target=&quot;_blank&quot;&gt;Журнал&lt;/a&gt; изменений ZoKrates&lt;/blockquote&gt;
  &lt;p id=&quot;pLo7&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;1zoH&quot;&gt;Рассмотрим пример, где у нас есть секретное значение &lt;code&gt;x&lt;/code&gt; а у нашего товарища Жака такое хэш-значение: &lt;code&gt;y = H(x)&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;mW68&quot;&gt;При  использовании 256-битного хэш, практически нет шансов, что мы когда-либо узнаем значение &lt;code&gt;x&lt;/code&gt;, зная только значение &lt;code&gt;y&lt;/code&gt;. Таким образом, &lt;code&gt;x&lt;/code&gt; может быть паролем.  Итак, посмотрим, сможем ли мы доказать &lt;code&gt;x&lt;/code&gt;, зная&lt;code&gt; H(x)&lt;/code&gt; и запустить смарт-контракт. &lt;/p&gt;
  &lt;p id=&quot;BSNL&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;VbyD&quot;&gt;&lt;strong&gt;1) В ZoKrates Playground  напишем следующий код:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;e0Jh&quot; data-lang=&quot;javascript&quot;&gt;import &amp;quot;hashes/sha256/512bitPacked&amp;quot; as sha256packed;

def main(private field a, private field b, private field c, private field d) -&amp;gt; field[2] {
    field[2] h = sha256packed([a, b, c, d]);
    return h;
}&lt;/pre&gt;
  &lt;blockquote id=&quot;FS0g&quot;&gt;Первая строка импортирует &lt;code&gt;sha256packed&lt;/code&gt;функцию из стандартной библиотеки ZoKrates.&lt;code&gt;sha256packed&lt;/code&gt;— это реализация SHA256, оптимизированная для использования в ZoKrates DSL. Вот как это работает: мы хотим передать 512 бит входных данных в SHA256. Однако&lt;code&gt;field&lt;/code&gt;значение может содержать только 254 бита из-за размера основного поля, которое мы используем. Как следствие, мы используем четыре элемента поля, каждый из которых кодирует 128 бит, для представления наших входных данных. Затем четыре элемента объединяются в ZoKrates и передаются в SHA256. Учитывая, что длина полученного хеша составляет 256 бит,  то он делится на две части и возвращает каждое значение как 128-битное число.&lt;/blockquote&gt;
  &lt;p id=&quot;wYbJ&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;K8Qr&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f6/1f/f61f9cc9-9e5c-48e8-87b9-b29d6771c8e2.png&quot; width=&quot;528&quot; /&gt;
    &lt;figcaption&gt;&lt;a href=&quot;https://zokrates.github.io/examples/sha256example.html&quot; target=&quot;_blank&quot;&gt;Вычисление хеша&lt;/a&gt; с помощью ZoKrates.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;FuaG&quot;&gt;Переходим во вкладку Execute и нажимаем Run&lt;/p&gt;
  &lt;figure id=&quot;YKWz&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e8/9e/e89e414b-90f3-48c0-9a6d-91679eb5e0ff.png&quot; width=&quot;326&quot; /&gt;
  &lt;/figure&gt;
  &lt;blockquote id=&quot;Ihtk&quot;&gt;&lt;code&gt;[ &amp;quot;71860681579908444993719277659355514616&amp;quot;, &amp;quot;203894998809118867442052767119280883826&amp;quot; ]&lt;/code&gt;&lt;/blockquote&gt;
  &lt;p id=&quot;rKO0&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;IPPb&quot;&gt;&lt;strong&gt;2) Создадим доказательство с нулевым разглашением.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;WRgh&quot;&gt;2.1) В Remix IDE cоздадим фаил &lt;code&gt;main.zok&lt;/code&gt; и напишем следующий код:&lt;/p&gt;
  &lt;pre id=&quot;I9fs&quot; data-lang=&quot;javascript&quot;&gt;import &amp;quot;hashes/sha256/512bitPacked&amp;quot; as sha256packed;

def main(private field a, private field b, private field c, private field d) {
    field[2] h = sha256packed([a, b, c, d]);
    assert(h[0] == 71860681579908444993719277659355514616);
    assert(h[1] == 203894998809118867442052767119280883826);
    return;
}&lt;/pre&gt;
  &lt;blockquote id=&quot;btB4&quot;&gt;Код использует библиотеку sha256packed для вычисления хеша SHA-256 от четырех приватных полей a, b, c и d. Затем программа проверяет, что вычисленный хеш совпадает с ожидаемыми значениями, и возвращает ошибку, если это не так. В данном случае программа проверяет, что вычисленный хеш (полученный ранее в п.1) равен 71860681579908444993719277659355514616 для h0 и 203894998809118867442052767119280883826 для h1. Если это условие выполняется, то программа завершается успешно, иначе возникает ошибка.&lt;/blockquote&gt;
  &lt;p id=&quot;2f6C&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;4eK3&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/33/f0/33f0f6f1-426a-413a-9296-0a16beafa62f.png&quot; width=&quot;463&quot; /&gt;
    &lt;figcaption&gt;main.zok&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;biCj&quot;&gt;2.2) Добавим плагин ZoKrates в Remix IDE&lt;/p&gt;
  &lt;figure id=&quot;Nbzg&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/be/31/be31ab16-3323-43b1-a3b1-bb5b7f14d1bf.png&quot; width=&quot;156&quot; /&gt;
    &lt;figcaption&gt;Менеджер плагинов&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;13Lw&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;cj7E&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/80/fa/80fa4b7f-096c-45d5-8ed9-6740c28b3eba.png&quot; width=&quot;369&quot; /&gt;
    &lt;figcaption&gt;Активация ZoKrates&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;0fp5&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;F1KE&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/51/24/5124918e-e441-451a-98c4-cf2ffeaf9d44.png&quot; width=&quot;165&quot; /&gt;
    &lt;figcaption&gt;ZoKrates&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;HGeo&quot;&gt;2.3) &lt;strong&gt;Компиляция:&lt;/strong&gt; на левой боковой панели кнопка компиляции. Если ошибки нет, можем двигаться дальше.&lt;/p&gt;
  &lt;figure id=&quot;0wXP&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/77/c0/77c07daf-dd49-465e-93f0-118c34b2bc13.png&quot; width=&quot;372&quot; /&gt;
    &lt;figcaption&gt;Компиляция кода&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;LTAD&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;eQ0V&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1e/31/1e31599c-289d-4d90-b39a-5380861a2593.png&quot; width=&quot;328&quot; /&gt;
    &lt;figcaption&gt;Скомпилировано успешно&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;OhUy&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;KDwF&quot;&gt;2.4) &lt;strong&gt;Вычисление свидетеля &lt;/strong&gt;для которого предоставлены действительные частные значения (наш пароль) Уже на этой стадии пароль изменить не сможем т.к. хеш к этому паролю скомпилирован. &lt;/p&gt;
  &lt;blockquote id=&quot;BpNH&quot;&gt;Свидетель – представляет собой набор данных, который подтверждает истинность скрытой информации, не раскрывая конфиденциальности. Необходим для доказательства, что держатель этой информации обладает знанием о ней, но не раскрывает саму информацию. &lt;/blockquote&gt;
  &lt;p id=&quot;IZpK&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;PDAF&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d0/f2/d0f2b000-115f-43a8-af72-38de3ba11130.png&quot; width=&quot;288&quot; /&gt;
    &lt;figcaption&gt;Вычислено успешно&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;cyuj&quot;&gt;К примеру удаляем одну цифру - Execution failed&lt;/p&gt;
  &lt;figure id=&quot;PjHi&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/06/f6/06f6d7d4-8bd9-4050-82a0-5071e7ab978e.png&quot; width=&quot;298&quot; /&gt;
    &lt;figcaption&gt;Выполнение не удалось&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;FgA7&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;DiGO&quot;&gt;2.5) &lt;strong&gt;Run&lt;/strong&gt; &lt;strong&gt;Setup (cоздать доказательство).&lt;/strong&gt; Используем свидетель для создания доказательства, которое демонстрирует достоверность вычислений без раскрытия частных входных данных. После вычисления мы можем сгенерировать проверочный и подтверждающий ключ. Это может занять больше минуты, но выполняется только один раз. Эти ключи получены из источника случайности, обычно называемого «токсичными отходами». Мы увидим, что создался файл с именем &lt;code&gt;verification_key.json,&lt;/code&gt; который содержит все эти данные.&lt;/p&gt;
  &lt;p id=&quot;QkV1&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;bRBS&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ec/0d/ec0d44be-84d2-481a-8dbc-a32e4be1bfa6.png&quot; width=&quot;274&quot; /&gt;
    &lt;figcaption&gt;Запустить установку&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;tqId&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;rOLR&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/39/81/3981776c-45b7-4790-9052-ff3806363ecb.png&quot; width=&quot;674.9065743944636&quot; /&gt;
    &lt;figcaption&gt;Изменение ключа проверки&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;yy5X&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;5PJh&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4b/9a/4b9a245d-c0fc-4067-9b37-ed172abd4967.png&quot; width=&quot;935&quot; /&gt;
    &lt;figcaption&gt;verification_key.json&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;U9h6&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;7hI4&quot;&gt;2.6) &lt;strong&gt;Generate Proof&lt;/strong&gt; - имея ключи верификатора, а также свидетель, мы теперь можем сгенерировать наше доказательство:&lt;/p&gt;
  &lt;p id=&quot;0yRU&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;JZWn&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d7/a1/d7a1985d-96db-403e-89f8-afab7e50a5da.png&quot; width=&quot;265&quot; /&gt;
    &lt;figcaption&gt;Создать доказательство&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;SIbW&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;viL0&quot;&gt;Теперь у нас есть проверяющее доказательство &lt;code&gt;(proof.js)&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;wDic&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;nLLI&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a9/d7/a9d704da-6366-472d-8ae2-ed946d884ade.png&quot; width=&quot;616&quot; /&gt;
    &lt;figcaption&gt;Доказательство (proof.js)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;nGUD&quot;&gt;&lt;/p&gt;
  &lt;pre id=&quot;f8tJ&quot; data-lang=&quot;javascript&quot;&gt;{
  &amp;quot;scheme&amp;quot;: &amp;quot;g16&amp;quot;,
  &amp;quot;curve&amp;quot;: &amp;quot;bn128&amp;quot;,
  &amp;quot;proof&amp;quot;: {
    &amp;quot;a&amp;quot;: [
      &amp;quot;0x0ac917308a7b8db29288c028109c8617f910f6b6843c975a736374ddbc276797&amp;quot;,
      &amp;quot;0x1960e7c91c4bb774e6308c418615d566280679a5b7c18b45f89ab64098187bdf&amp;quot;
    ],
    &amp;quot;b&amp;quot;: [
      [
        &amp;quot;0x2df5af53473f2343c58091e657898f92b5b7f0b88a6ea7514c9952a47e07f444&amp;quot;,
        &amp;quot;0x0121a9c22c2abafb7dee637ef4f743a4d62798835350d042d55c708d2481fe3d&amp;quot;
      ],
      [
        &amp;quot;0x1e46763eeacc9f85215740e3d3f7eaddc2fca5c8115c282be1e60157740bcec8&amp;quot;,
        &amp;quot;0x23d8a13843a39d8f37b8a0ef6da31281b7ee2c61d16079a48f2620b9f6ef9aa0&amp;quot;
      ]
    ],
    &amp;quot;c&amp;quot;: [
      &amp;quot;0x2f990abf7f96daee712f3ca282e7e304370ac70d633b6156a41b91f140e6cb41&amp;quot;,
      &amp;quot;0x0e619f6d20fc6c39fa3fa0320c795e57218824f1f11ee90b0d7edf3a306de8fd&amp;quot;
    ]
  },
  &amp;quot;inputs&amp;quot;: []
}&lt;/pre&gt;
  &lt;p id=&quot;6aLE&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;k6yg&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e7/b1/e7b17a34-6ae3-4ac8-b543-3220fd25e6c1.png&quot; width=&quot;326&quot; /&gt;
    &lt;figcaption&gt;Копируем доказательство&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;blockquote id=&quot;pCmE&quot;&gt;[[&amp;quot;0x0ac917308a7b8db29288c028109c8617f910f6b6843c975a736374ddbc276797&amp;quot;,&amp;quot;0x1960e7c91c4bb774e6308c418615d566280679a5b7c18b45f89ab64098187bdf&amp;quot;],[[&amp;quot;0x2df5af53473f2343c58091e657898f92b5b7f0b88a6ea7514c9952a47e07f444&amp;quot;,&amp;quot;0x0121a9c22c2abafb7dee637ef4f743a4d62798835350d042d55c708d2481fe3d&amp;quot;],[&amp;quot;0x1e46763eeacc9f85215740e3d3f7eaddc2fca5c8115c282be1e60157740bcec8&amp;quot;,&amp;quot;0x23d8a13843a39d8f37b8a0ef6da31281b7ee2c61d16079a48f2620b9f6ef9aa0&amp;quot;]],[&amp;quot;0x2f990abf7f96daee712f3ca282e7e304370ac70d633b6156a41b91f140e6cb41&amp;quot;,&amp;quot;0x0e619f6d20fc6c39fa3fa0320c795e57218824f1f11ee90b0d7edf3a306de8fd&amp;quot;]]&lt;/blockquote&gt;
  &lt;p id=&quot;3TP9&quot; data-align=&quot;center&quot;&gt;&lt;em&gt;Наше доказательство&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;53Et&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Y2Gw&quot;&gt;2.7) &lt;strong&gt;Export Verifier&lt;/strong&gt; - генерирует контракт Solidity, который включает ключ проверки. Этот контракт предоставляет общедоступную функцию для проверки решений скомпилированной программы. Это обеспечивает независимую проверку правильности и повышает прозрачность в системах с нулевым разглашением данных.&lt;/p&gt;
  &lt;p id=&quot;gRFK&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;bK6p&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2b/9e/2b9eebb8-92b5-46bf-9632-b243a2ab92db.png&quot; width=&quot;295&quot; /&gt;
    &lt;figcaption&gt;Экспорт верификатора&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;AXty&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/09/49/0949f22c-69ef-4b71-af39-590a96b8da10.png&quot; width=&quot;273&quot; /&gt;
    &lt;figcaption&gt;Верификатор экспортирован &lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;20ec&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c6/d2/c6d278db-8475-4b48-8abe-1b6cc7e91686.png&quot; width=&quot;440&quot; /&gt;
    &lt;figcaption&gt;Файл verifier.sol&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;h0zG&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;I2Ck&quot;&gt;&lt;strong&gt;3) Проверка доказательства с нулевым разглашением.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;wiAp&quot;&gt;3.1) Компилируем &lt;code&gt;verifier.sol&lt;/code&gt; После развертывания контракт верификатора можно использовать для проверки решений скомпилированной программы.&lt;/p&gt;
  &lt;figure id=&quot;IU2M&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/25/9c/259c2b7c-0b35-45e2-9949-56388e724aab.png&quot; width=&quot;534&quot; /&gt;
    &lt;figcaption&gt;Solidity компилятор&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;KDXG&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;do9y&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b6/36/b63606f7-1e29-4c2e-91b8-5336ba2f3adb.png&quot; width=&quot;444&quot; /&gt;
    &lt;figcaption&gt;Компиляция файла verifier.sol&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;iMxb&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;MxbR&quot;&gt; 3.2) Развертывание смарт-контракта &lt;code&gt;verifier.sol&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;zFd3&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5d/5c/5d5c017e-edcc-4a48-923e-23f445ae560c.png&quot; width=&quot;402&quot; /&gt;
    &lt;figcaption&gt;Deploy verifier.sol&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Q2se&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;RHk8&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/77/68/776885d5-083b-4b1d-8d52-100e9234bed2.png&quot; width=&quot;293&quot; /&gt;
    &lt;figcaption&gt;Контракт Verifier&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;czdY&quot;&gt;&lt;/p&gt;
  &lt;blockquote id=&quot;QuZ6&quot;&gt;[[&amp;quot;0x0ac917308a7b8db29288c028109c8617f910f6b6843c975a736374ddbc276797&amp;quot;,&amp;quot;0x1960e7c91c4bb774e6308c418615d566280679a5b7c18b45f89ab64098187bdf&amp;quot;],[[&amp;quot;0x2df5af53473f2343c58091e657898f92b5b7f0b88a6ea7514c9952a47e07f444&amp;quot;,&amp;quot;0x0121a9c22c2abafb7dee637ef4f743a4d62798835350d042d55c708d2481fe3d&amp;quot;],[&amp;quot;0x1e46763eeacc9f85215740e3d3f7eaddc2fca5c8115c282be1e60157740bcec8&amp;quot;,&amp;quot;0x23d8a13843a39d8f37b8a0ef6da31281b7ee2c61d16079a48f2620b9f6ef9aa0&amp;quot;]],[&amp;quot;0x2f990abf7f96daee712f3ca282e7e304370ac70d633b6156a41b91f140e6cb41&amp;quot;,&amp;quot;0x0e619f6d20fc6c39fa3fa0320c795e57218824f1f11ee90b0d7edf3a306de8fd&amp;quot;]]&lt;/blockquote&gt;
  &lt;p id=&quot;cUp9&quot; data-align=&quot;center&quot;&gt;&lt;em&gt;Наше доказательство&lt;/em&gt;&lt;/p&gt;
  &lt;blockquote id=&quot;5dA8&quot;&gt;ZoKrates может генерировать большие ключи подтверждений и проверки, особенно для более сложных вычислений. Размер доказательств, может потенциально достигать нескольких мегабайт.&lt;/blockquote&gt;
  &lt;p id=&quot;BFDM&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;XFnb&quot;&gt;3.3) Вставляем доказательство в поле, а затем протестируем: должно быть написано&lt;code&gt; «0»: «bool: r true». &lt;/code&gt;Это означает, что транзакция успешно подтверждена. &lt;/p&gt;
  &lt;figure id=&quot;gLvp&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cb/40/cb400429-b29a-4803-9cd1-9cd2bb18ad2e.png&quot; width=&quot;289&quot; /&gt;
    &lt;figcaption&gt;Доказательство истинно&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;YW8m&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;llhL&quot;&gt;Но если мы воспользуемся неверным доказательством, мы получим ложный результат: &lt;code&gt;errored: Error occured: invalid opcode.&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;VbxT&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;zqaV&quot;&gt;&lt;strong&gt;4) Развернем смарт-контракт в тестовой сети и проверим наше доказательство. &lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;qeng&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3d/a4/3da49fc5-73d2-4fb6-bac6-9adbb6b5f5a2.png&quot; width=&quot;293&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;moLF&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c9/e2/c9e2ae07-149c-48db-8645-84a618d8d6ad.png&quot; width=&quot;344&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;7haN&quot;&gt;4.1) Создан новый смарт-контракт в сети Sepolia:&lt;/p&gt;
  &lt;figure id=&quot;BOn6&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cf/5d/cf5d172a-bd24-4ce4-9fde-9ea86691f696.png&quot; width=&quot;575&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;sceq&quot;&gt;&lt;a href=&quot;https://sepolia.etherscan.io/tx/0x0a555af118bc0961984947432ee28e20ff33e8f8525cf0b9fc31080a45c61566&quot; target=&quot;_blank&quot;&gt;https://sepolia.etherscan.io/tx/0x0a555af118bc0961984947432ee28e20ff33e8f8525cf0b9fc31080a45c61566&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;17G1&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;SmNB&quot;&gt;4.2) Переходим в контракт:&lt;/p&gt;
  &lt;figure id=&quot;F4DI&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f3/e3/f3e35328-6dc8-4430-97f1-883c8aa8d130.png&quot; width=&quot;777&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;l5oy&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;qupe&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/dc/ba/dcbad057-5417-4bd8-87e0-7b9dde6ef30b.png&quot; width=&quot;559&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Uzx6&quot;&gt;4.3) Контракт необходимо верифицировать.&lt;/p&gt;
  &lt;figure id=&quot;9qV3&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/40/79/407982a9-371d-4904-bfe0-65dd25494359.png&quot; width=&quot;740&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;YIkN&quot;&gt;4.3.1) Заполняем поля:&lt;/p&gt;
  &lt;figure id=&quot;aAKM&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/81/bb/81bb6b39-be82-42ee-8cea-f553a1a18fd9.png&quot; width=&quot;816&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;e1Yw&quot;&gt;4.3.2) В новом окне необходимо вставить код нашего контракта &lt;code&gt;verifier.sol&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;6XJ3&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a3/f4/a3f4bdbc-74a0-42fa-8032-bf70067cefed.png&quot; width=&quot;859&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;vo2k&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;h0V9&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/05/19/0519dd97-352d-418c-bfb5-6b306b62da3a.png&quot; width=&quot;587&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;XAM1&quot;&gt;4.3.3) Подтверждаем верификацию. &lt;/p&gt;
  &lt;figure id=&quot;ArB9&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/33/a2/33a20e59-0e82-42ad-b041-c27587962000.png&quot; width=&quot;561&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;rsms&quot;&gt;4.3.4) Верификация пройдена.&lt;/p&gt;
  &lt;figure id=&quot;Hdru&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ea/18/ea1891b5-d45f-47b6-b723-4d04886d5df7.png&quot; width=&quot;1010&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;WAMq&quot;&gt;4.4) Переходим в &lt;code&gt;Read Contract&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;brVf&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2e/ce/2ece3b56-2b11-4ac3-a088-4c4ec6ba8924.png&quot; width=&quot;595&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Ah3N&quot;&gt;4.5) В строку &lt;code&gt;proof (tuple)&lt;/code&gt; вставляем наше доказательство. &lt;/p&gt;
  &lt;figure id=&quot;LuN9&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/fc/c1/fcc1ffdc-75bf-4948-85f7-47abf4b389c9.png&quot; width=&quot;430&quot; /&gt;
  &lt;/figure&gt;
  &lt;blockquote id=&quot;8RWI&quot;&gt;[[&amp;quot;0x0ac917308a7b8db29288c028109c8617f910f6b6843c975a736374ddbc276797&amp;quot;,&amp;quot;0x1960e7c91c4bb774e6308c418615d566280679a5b7c18b45f89ab64098187bdf&amp;quot;],[[&amp;quot;0x2df5af53473f2343c58091e657898f92b5b7f0b88a6ea7514c9952a47e07f444&amp;quot;,&amp;quot;0x0121a9c22c2abafb7dee637ef4f743a4d62798835350d042d55c708d2481fe3d&amp;quot;],[&amp;quot;0x1e46763eeacc9f85215740e3d3f7eaddc2fca5c8115c282be1e60157740bcec8&amp;quot;,&amp;quot;0x23d8a13843a39d8f37b8a0ef6da31281b7ee2c61d16079a48f2620b9f6ef9aa0&amp;quot;]],[&amp;quot;0x2f990abf7f96daee712f3ca282e7e304370ac70d633b6156a41b91f140e6cb41&amp;quot;,&amp;quot;0x0e619f6d20fc6c39fa3fa0320c795e57218824f1f11ee90b0d7edf3a306de8fd&amp;quot;]]&lt;/blockquote&gt;
  &lt;p id=&quot;a9fO&quot; data-align=&quot;center&quot;&gt;&lt;em&gt;Доказательство&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;ReGe&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;ZNXU&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cd/d6/cdd66740-8ffd-4a2c-8270-fbdf64c67099.png&quot; width=&quot;478&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;vOc9&quot; data-align=&quot;center&quot;&gt;&lt;em&gt;Доказательство истинно&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;k9FP&quot;&gt;&lt;a href=&quot;https://sepolia.etherscan.io/address/0xe38f6eebf205303e417525bf52638290ffee7d08#readContract&quot; target=&quot;_blank&quot;&gt;https://sepolia.etherscan.io/address/0xe38f6eebf205303e417525bf52638290ffee7d08#readContract&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;iamK&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;LIzg&quot;&gt;&lt;strong&gt;Вывод:  &lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;wMHL&quot;&gt;При помощи инструментов ZoKrates сгенерировали доказательство zk-SNARKs и подтвердили истинность нашего значения &lt;code&gt;х&lt;/code&gt; которое было сохранено в хеш и разделено на две части. Как видим смарт-контракты с нулевым разглашением (ZK) предполагают внедрение системы, которая позволяет сторонам доказывать подлинность определенной информации, не раскрывая деталей этой информации.&lt;/p&gt;
  &lt;p id=&quot;F0Y4&quot;&gt;Этот подход обеспечивает хорошую защиту от кражи персональных данных, похитители не могут украсть то, чего не видят, что значительно затрудняет реализацию мошеннических действий.&lt;/p&gt;
  &lt;p id=&quot;Xml7&quot;&gt;ZoKrates делает создание zk-SNARKs доступным, предоставляя простой язык для написания функций. Также существует обширный &lt;a href=&quot;https://github.com/Zokrates/ZoKrates/tree/develop/zokrates_cli/examples&quot; target=&quot;_blank&quot;&gt;набор примеров&lt;/a&gt;, демонстрирующий все возможности языка. Потенциал использования: в системах идентификации, сохраняя конфиденциальность, в различных голосованиях, финансах, оракулах, приложениях DeFi и т.д.&lt;/p&gt;

</content></entry><entry><id>nodiggity:l2H2En0fEh0</id><link rel="alternate" type="text/html" href="https://teletype.in/@nodiggity/l2H2En0fEh0?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nodiggity"></link><title>Ethernaut - основы игры.</title><published>2024-01-17T16:24:34.657Z</published><updated>2024-01-18T14:35:02.638Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/89/03/89039717-71ea-4631-ad7a-56b3353a7788.png"></media:thumbnail><category term="ethernaut" label="Ethernaut"></category><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/03/68/03681812-bb66-4c62-b001-97e922943c26.jpeg&quot;&gt;Ethernaut – это СTF решение OpenZeppelin,  каждый уровень является смарт-контрактом, который необходимо «взломать». Исходный код игры полностью открытый, а все уровни созданы другими игроками.</summary><content type="html">
  &lt;p id=&quot;jOWv&quot;&gt;&lt;a href=&quot;https://ethernaut.openzeppelin.com/&quot; target=&quot;_blank&quot;&gt;Ethernaut&lt;/a&gt; – это СTF решение OpenZeppelin,  каждый уровень является смарт-контрактом, который необходимо «взломать». Исходный код игры полностью открытый, а все уровни созданы другими игроками.&lt;/p&gt;
  &lt;blockquote id=&quot;caDL&quot;&gt;CTF (Capture The Flags/War games) — это проблемы безопасности, в которых представлен уязвимый код и вам необходимо написать смарт-контракт для использования этой уязвимости.&lt;/blockquote&gt;
  &lt;figure id=&quot;VuDe&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/03/68/03681812-bb66-4c62-b001-97e922943c26.jpeg&quot; width=&quot;571.717528373266&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;F8f1&quot;&gt;Проблема Ethernaut в том что некоторые уязвимости применимы только к старым версиям Solidity и в реальной жизни мы их уже не увидим. Тем не менее это хороший инструмент для отработки навыков. &lt;/p&gt;
  &lt;p id=&quot;xyW0&quot;&gt;Игра изначально создавалась для использования в тестовой сети Ethereum, но на январь 2024 г. запланировано прекращение поддержки cети Goerli. Для подписания транзакций буду использовать &lt;a href=&quot;https://chainlist.org/?testnets=true&amp;search=Mumbai&quot; target=&quot;_blank&quot;&gt;Polygon Mumbai.&lt;/a&gt;&lt;/p&gt;
  &lt;h3 id=&quot;aoVF&quot;&gt;Задача 0. Hello Ethernaut&lt;/h3&gt;
  &lt;p id=&quot;jhOI&quot;&gt;Методы контракта уровня 0 интегрированы в консоль нашего браузера, что позволят нам инициировать вызовы методов.&lt;/p&gt;
  &lt;p id=&quot;w2Hn&quot;&gt;1) Добавим в метамаск тестовую сеть &lt;a href=&quot;https://chainlist.org/?testnets=true&amp;search=Mumbai&quot; target=&quot;_blank&quot;&gt;Polygon Mumbai&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;vENH&quot;&gt;2) В &lt;a href=&quot;https://mumbaifaucet.com/&quot; target=&quot;_blank&quot;&gt;кране&lt;/a&gt; запрашиваем Matic&lt;/p&gt;
  &lt;p id=&quot;3M3i&quot;&gt;3) Переходим на &lt;a href=&quot;https://ethernaut.openzeppelin.com/&quot; target=&quot;_blank&quot;&gt;сайт&lt;/a&gt; игры, подключаем кошелек.&lt;/p&gt;
  &lt;blockquote id=&quot;RQkN&quot;&gt;Можем сразу поменять язык.&lt;/blockquote&gt;
  &lt;figure id=&quot;nZrz&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/05/24/0524e00c-b661-4d70-b233-4788d440c7dc.png&quot; width=&quot;603&quot; /&gt;
    &lt;figcaption&gt;Панель выбора языка&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;pY1d&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;tU1J&quot;&gt;4) Выбираем задачу &lt;/p&gt;
  &lt;figure id=&quot;ewPn&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3b/7c/3b7c1c28-8bae-48e4-973b-3e850dec8dcc.png&quot; width=&quot;835&quot; /&gt;
    &lt;figcaption&gt;Панель выбора задачи&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;reac&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;d1Jt&quot;&gt;5) Откроем консоль разработчика Chrome. (&lt;code&gt;Правая кнопка мыши - Просмотреть код - Вкладка Console&lt;/code&gt;)&lt;/p&gt;
  &lt;figure id=&quot;GrXd&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ec/e3/ece340aa-b0b3-480e-91e1-2ca760750321.png&quot; width=&quot;386&quot; /&gt;
    &lt;figcaption&gt;Вызов консоли&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;2omB&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;548N&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f0/3e/f03e3238-e138-4238-b706-3a1c4769f690.png&quot; width=&quot;602&quot; /&gt;
    &lt;figcaption&gt;Приветствие Ethernaut&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;fWhA&quot;&gt;6) Из нашей консоли мы вызовем команду: &lt;code&gt;player&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;tn9I&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9d/a4/9da45187-2d1f-4086-b68a-7f187eaca244.png&quot; width=&quot;428&quot; /&gt;
    &lt;figcaption&gt;Консоль выводит адрес моего кошелька&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;D5at&quot;&gt;&lt;/p&gt;
  &lt;pre id=&quot;wPTw&quot;&gt;также инструкция с командами доступна в окне нашей задачи. &lt;/pre&gt;
  &lt;figure id=&quot;0pzb&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/79/19/7919dc9b-295e-426c-ae70-87c6481a4e62.png&quot; width=&quot;643&quot; /&gt;
    &lt;figcaption&gt;Окно с инструкцией к текущей задаче&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;G42Z&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;kGyZ&quot;&gt;7) Чтобы проверить свой баланс вызовем команду: &lt;code&gt;await getBalance(player)&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;Ez54&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/46/95/46957d0d-8c31-4fce-8f76-fb9abfd46e77.png&quot; width=&quot;438&quot; /&gt;
    &lt;figcaption&gt;Текущий баланс кошелька&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;xvWB&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;rwKJ&quot;&gt;8) Команда &lt;code&gt;help() покажет список вспомогательных функций:&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;xqFE&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/bc/d2/bcd25e78-da4f-4915-87f9-70f91561727c.png&quot; width=&quot;439&quot; /&gt;
    &lt;figcaption&gt;Вспомогательные функции&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;FkLl&quot;&gt;9) Команда &lt;code&gt;await ethernaut.owner()&lt;/code&gt; выведет адрес владельца контракта ethernaut:&lt;/p&gt;
  &lt;figure id=&quot;ApEQ&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f1/0a/f10ad01f-22a8-4812-b2ac-75c8ab6d6cd5.png&quot; width=&quot;410&quot; /&gt;
    &lt;figcaption&gt;owner&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;VfOQ&quot;&gt;10)  Для прохождения уровня необходимо запросить &lt;strong&gt;инстанс уровня.&lt;/strong&gt; (экземпляр) Чтобы запросить инстанс нажмем на соответствующую кнопку внизу страницы и подтвердим транзакцию в метамаске. После этого в консоли должно появиться несколько новых сообщений.&lt;/p&gt;
  &lt;blockquote id=&quot;dHjj&quot;&gt;Примечание: создание инстанса займет некоторое время&lt;/blockquote&gt;
  &lt;figure id=&quot;qeLf&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/08/39/08392894-e74d-4ee3-9984-a285cb2484cc.png&quot; width=&quot;424&quot; /&gt;
    &lt;figcaption&gt;Запрс инстанса&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Xy9B&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;SQmp&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/eb/6d/eb6df422-e1ae-4264-a6a1-68ab785586c8.png&quot; width=&quot;465&quot; /&gt;
    &lt;figcaption&gt;Адрес инстанса&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;9STo&quot;&gt; &lt;/p&gt;
  &lt;p id=&quot;KRiX&quot;&gt;11) Теперь чтобы завершить уровень необходимо взаимодействовать с контрактом, следующими командами: &lt;/p&gt;
  &lt;figure id=&quot;u6RW&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/36/1c/361c59d5-8abb-430e-9f42-f6a6bdb80a4c.png&quot; width=&quot;692&quot; /&gt;
    &lt;figcaption&gt;Взаимодействие с контрактом&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;G9cK&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;jFpC&quot;&gt;12) Вызовем метод &lt;code&gt;await contract.info()&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;E2vG&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ee/7b/ee7baf67-476a-423c-8f62-ab3d2f032117.png&quot; width=&quot;337&quot; /&gt;
  &lt;/figure&gt;
  &lt;pre id=&quot;K8zi&quot;&gt;Ответ: «Вы найдете то, что вам нужно, в info1()»&lt;/pre&gt;
  &lt;p id=&quot;LB4I&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;6tlU&quot;&gt;13) Вызовем метод &lt;code&gt;await contract.info1()&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;r4CY&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e3/93/e3934331-2ac4-4277-964c-e60441310a20.png&quot; width=&quot;373&quot; /&gt;
  &lt;/figure&gt;
  &lt;pre id=&quot;Cz9C&quot;&gt;Ответ: Попробуйте info2(), но с «hello» в качестве параметра.&lt;/pre&gt;
  &lt;p id=&quot;WWop&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;TdTz&quot;&gt;14) Вызовем метод &lt;code&gt;await contract.info2(&amp;quot;hell&amp;quot;)&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;MhQA&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/90/3d/903d6ab6-a841-44ff-bef8-931bdc658a62.png&quot; width=&quot;509&quot; /&gt;
  &lt;/figure&gt;
  &lt;pre id=&quot;pri9&quot;&gt;Ответ: «Свойство infoNum содержит номер следующего информационного метода, 
который будет вызван».&lt;/pre&gt;
  &lt;p id=&quot;x5ka&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;X6ZU&quot;&gt;15) Вызовем метод &lt;code&gt;await contract.infoNum()&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;z6eP&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/41/d9/41d9648e-568e-45d3-95a4-58e97d88d4e3.png&quot; width=&quot;446&quot; /&gt;
    &lt;figcaption&gt;Номер 42 - номер следующего информационного метода&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;1FTe&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;0KrG&quot;&gt;16) Вызовем метод &lt;code&gt;await contract.info42()&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;FFDK&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5e/c0/5ec01ec8-67fe-4078-a58e-662faa1c8bce.png&quot; width=&quot;360&quot; /&gt;
  &lt;/figure&gt;
  &lt;pre id=&quot;3Pjs&quot;&gt;Получаем ответ: &amp;#x27;theMethodName — это имя следующего метода.&amp;#x27;&lt;/pre&gt;
  &lt;p id=&quot;NvNC&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;4dET&quot;&gt;17) Вызовем метод &lt;code&gt;await contract.theMethodName()&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;lCep&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/44/56/4456f61f-1494-4fbd-a13c-678aff8fc0f9.png&quot; width=&quot;292&quot; /&gt;
  &lt;/figure&gt;
  &lt;pre id=&quot;H6wD&quot;&gt;Наш ответ: &amp;#x27;Имя метода — method7123949.&amp;#x27;&lt;/pre&gt;
  &lt;p id=&quot;Y2Qs&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;pPbA&quot;&gt;18) Вызовем &lt;code&gt;await contract.method7123949()&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;u7Wv&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/be/45/be4574ce-c32d-4f92-b526-445e6bdf4bb1.png&quot; width=&quot;432&quot; /&gt;
  &lt;/figure&gt;
  &lt;pre id=&quot;143W&quot;&gt;Ответ: &amp;#x27;Если вы знаете пароль, отправьте его в функцию authenticate().&amp;#x27;&lt;/pre&gt;
  &lt;p id=&quot;aS7j&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;M806&quot;&gt;19) Вызовем функцию пароля &lt;code&gt;await contract.password()&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;Y0Lo&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e9/2e/e92e42a8-b4ab-4255-b220-eb10dfcca3e5.png&quot; width=&quot;263&quot; /&gt;
  &lt;/figure&gt;
  &lt;pre id=&quot;X85i&quot;&gt;Наш пароль: &amp;#x27;ethernaut0&amp;#x27;&lt;/pre&gt;
  &lt;p id=&quot;p6KI&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;hBxA&quot;&gt;20) Передадим пароль в функцию &lt;code&gt;authenticate()&lt;/code&gt; и подпишем транзакцию.&lt;/p&gt;
  &lt;figure id=&quot;kQq9&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ed/5d/ed5dc2b7-dfae-4911-978b-67353511de55.png&quot; width=&quot;553&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;OT1f&quot;&gt;21) Транзакция прошла успешно.&lt;/p&gt;
  &lt;figure id=&quot;2iB0&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1c/3b/1c3b8996-ee59-45ba-8d54-41dd983dac0f.png&quot; width=&quot;440&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;F1d7&quot;&gt;Также можем посмотреть txid в сети: &lt;a href=&quot;https://mumbai.polygonscan.com/tx/0xc6eccc73e46da5b472d1410efc73d1ee40f169019251537f735f67510caeeed3&quot; target=&quot;_blank&quot;&gt;https://mumbai.polygonscan.com/tx/0xc6eccc73e46da5b472d1410efc73d1ee40f169019251537f735f67510caeeed3&lt;/a&gt;&lt;/p&gt;
  &lt;figure id=&quot;XcN3&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a1/13/a113eaf0-8923-4cc4-a973-8093547620a3.png&quot; width=&quot;433&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;cEsp&quot;&gt;22) Проверка: вызовем метод &lt;code&gt;await contract.getCleared()&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;jXwd&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/23/d2/23d228f1-993f-486f-9dbf-12f0e5262fea.png&quot; width=&quot;280&quot; /&gt;
  &lt;/figure&gt;
  &lt;pre id=&quot;LqQi&quot;&gt;Ответ: true&lt;/pre&gt;
  &lt;p id=&quot;pSqS&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;9HEZ&quot;&gt;23) Отправим инстанс на проверку и подпишем транзакцию.&lt;/p&gt;
  &lt;figure id=&quot;jfFH&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/90/ba/90babe92-2567-4901-9d61-65d61b2b9a16.png&quot; width=&quot;743&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;UAz6&quot;&gt;24) Ответ: Отлично, Уровень пройден!&lt;/p&gt;
  &lt;figure id=&quot;ds8p&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1d/f0/1df0e44b-4653-46ed-a0d5-2d8649e0b15f.png&quot; width=&quot;453&quot; /&gt;
  &lt;/figure&gt;
  &lt;blockquote id=&quot;uZhg&quot;&gt;Также мы получим контракт с которым работали и его можно задеплоить в ремиксе.&lt;/blockquote&gt;
  &lt;figure id=&quot;E9Ue&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b5/6e/b56ec471-3435-4647-92fc-e21499ee7a4c.png&quot; width=&quot;316&quot; /&gt;
    &lt;figcaption&gt;Контракт: Hello Ethernaut&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;I2ut&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;E1pq&quot;&gt;&lt;strong&gt;Бонусная часть:&lt;/strong&gt;  В консоле вызовем &lt;code&gt;await contract&lt;/code&gt; и увидим все методы которые возможно вызвать в данном контракте.&lt;/p&gt;
  &lt;figure id=&quot;lbO2&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/21/2e/212e2311-5717-483f-b60f-48ea9fe6d21f.png&quot; width=&quot;528&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;W3tJ&quot;&gt;Нам интересна вкладка &lt;a href=&quot;https://docs.soliditylang.org/en/latest/abi-spec.html&quot; target=&quot;_blank&quot;&gt;ABI&lt;/a&gt; (Application Binary Interface) - используется для кодирования данных, которые передаются между смарт-контрактом и внешним приложением. ABI представлены в формате &lt;code&gt;JSON&lt;/code&gt; и обычно генерируются компилятором при развертывании смарт-контракта, cюда входят имена, типы функций и событий &lt;em&gt;(В Contract ABI возможно обнаружить функции которые скрыты во вкладке Write Contract)&lt;/em&gt; В контексте нашей задачи мы можем сразу посмотреть все доступные функции и решить уровень за два шага.&lt;/p&gt;
  &lt;figure id=&quot;W08f&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6c/22/6c223ef8-5893-434f-89e3-2688c4eae9e8.png&quot; width=&quot;466&quot; /&gt;
    &lt;figcaption&gt;ABI&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;leYg&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;Xuco&quot;&gt;&lt;strong&gt;Вывод: &lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;Vmf9&quot;&gt;Рассмотрели методы контракта уровня 0, добавили в метамаск тестовую сеть Polygon Mumbai, ознакомились с консолью браузера, прошлись по необходимым командам, успешно завершили уровень. Получили данные c contract ABI.&lt;/p&gt;
  &lt;p id=&quot;DONs&quot;&gt;Поэтапное прохождение игры может стать хорошей отправной точкой для новичка по обнаружению уязвимостей в смарт-контрактах и понимания функций языка. &lt;/p&gt;

</content></entry><entry><id>nodiggity:81T5YzNnViQ</id><link rel="alternate" type="text/html" href="https://teletype.in/@nodiggity/81T5YzNnViQ?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nodiggity"></link><title>Смарт-контракт «Калькулятор»</title><published>2024-01-04T18:53:44.901Z</published><updated>2024-02-03T13:51:55.832Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/52/86/52862fa0-8d82-469a-9e46-7b4d01d3f904.png"></media:thumbnail><category term="smart-kontrakty" label="Смарт-контракты"></category><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/9b/7b/9b7b16f1-6baf-48a4-b233-1ef225075393.jpeg&quot;&gt;1. Создадим контракт под названием Calculator
2. Создадим переменную result для хранения изначального результата.
3. Создадим функции сложения, вычитания, умножения, деления, возведение в степень, извлечения квадратного корня и округление чисел. 
4. Создадим функцию получить результат вычислений.</summary><content type="html">
  &lt;p id=&quot;89oe&quot;&gt;1. Создадим контракт под названием &lt;code&gt;Calculator&lt;/code&gt;&lt;br /&gt;2. Создадим переменную &lt;code&gt;result&lt;/code&gt; для хранения исходного значения калькулятора.&lt;br /&gt;3. Создадим функции сложения, вычитания, умножения, деления, возведение в степень, извлечения квадратного корня и округление чисел. &lt;br /&gt;4. Создадим функцию получить результат вычислений.&lt;/p&gt;
  &lt;figure id=&quot;fWDa&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9b/7b/9b7b16f1-6baf-48a4-b233-1ef225075393.jpeg&quot; width=&quot;554&quot; /&gt;
  &lt;/figure&gt;
  &lt;blockquote id=&quot;p4sv&quot;&gt;Для создания логики контракта мы будем использовать Solidity - Операторы.&lt;/blockquote&gt;
  &lt;h2 id=&quot;oGKj&quot;&gt;Что такое Solidity - операторы?&lt;/h2&gt;
  &lt;p id=&quot;Nwbm&quot;&gt;Возьмем простое выражение &lt;strong&gt;3 + 5 равно&lt;/strong&gt; 8. Здесь 3 и 5 называются &lt;strong&gt;операндами&lt;/strong&gt; а &amp;#x27;+&amp;#x27; называется &lt;strong&gt;оператором&lt;/strong&gt;. Solidity поддерживает следующие типы операторов:&lt;/p&gt;
  &lt;ul id=&quot;XGej&quot;&gt;
    &lt;li id=&quot;y9ZE&quot;&gt;&lt;a href=&quot;#izRw&quot;&gt;Арифметические операторы&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;62x7&quot;&gt;&lt;a href=&quot;#cY4E&quot;&gt;Операторы сравнения&lt;/a&gt; &lt;/li&gt;
    &lt;li id=&quot;JtXC&quot;&gt;&lt;a href=&quot;#gEMl&quot;&gt;Логические операторы&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;2PYC&quot;&gt;&lt;a href=&quot;#r4gs&quot;&gt;Побитовые операторы&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;WYPr&quot;&gt;&lt;a href=&quot;#kuqH&quot;&gt;Операторы присваивания&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;anis&quot;&gt;&lt;a href=&quot;#UW2O&quot;&gt;Условные (или тернарные)&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;1Ood&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;izRw&quot;&gt;Арифметические операторы&lt;/h2&gt;
  &lt;p id=&quot;bWGI&quot;&gt;Арифметические операторы — это своего рода математические помощники в программировании, которые позволяют выполнять такие операции, как сложение, вычитание, умножение, деление и т.д.&lt;/p&gt;
  &lt;blockquote id=&quot;n5R4&quot;&gt;Предположим, что переменная A содержит 10, а переменная B содержит 20, тогда -&lt;/blockquote&gt;
  &lt;figure id=&quot;G9Uq&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8f/19/8f19164a-e01d-4c68-8ed1-02b9a66863e7.png&quot; width=&quot;510&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;dK1p&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/33/5a/335a8369-43d1-4999-a482-2efecb53caf5.png&quot; width=&quot;520.8471074380166&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;C3Pt&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c0/9f/c09f7dd0-157e-4d5b-8615-a5ebccbd179f.png&quot; width=&quot;522&quot; /&gt;
  &lt;/figure&gt;
  &lt;blockquote id=&quot;0GZy&quot; data-align=&quot;right&quot;&gt;Solidity - журнал изменений (&lt;a href=&quot;https://github.com/ethereum/solidity/blob/develop/Changelog.md&quot; target=&quot;_blank&quot;&gt;Link&lt;/a&gt;)&lt;/blockquote&gt;
  &lt;h3 id=&quot;eSbZ&quot;&gt;&lt;strong&gt;В следующем коде показано, как использовать арифметические операторы:&lt;/strong&gt;&lt;/h3&gt;
  &lt;pre id=&quot;YIh9&quot; data-lang=&quot;javascript&quot;&gt;// SPDX-License-Identifier: MIT
pragma solidity &amp;gt;=0.8.23;

contract Addition {
   constructor() public{
   }
   function getResult() public view returns(uint){
      uint a = 1; 
      uint b = 2;
      uint result = a + b; //арифметическая операция addition
      return result; 
   }
}&lt;/pre&gt;
  &lt;figure id=&quot;vE85&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/87/7f/877f1851-0ba2-4e24-afa4-90e848dc9767.png&quot; width=&quot;276&quot; /&gt;
    &lt;figcaption&gt;Вывод: 3&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;n4Id&quot;&gt;Ключевые моменты:&lt;/p&gt;
    &lt;ul id=&quot;iuZa&quot;&gt;
      &lt;li id=&quot;9A1M&quot;&gt;&lt;strong&gt;Целочисленное деление:&lt;/strong&gt; Деление Solidity возвращает только частное, отбрасывая остаток. Поддержка дробных чисел или чисел с точкой в Solidity все еще плохо реализована. Для деления с плавающей запятой нужно будет использовать внешние библиотеки или дополнительные приемы.&lt;/li&gt;
      &lt;li id=&quot;qeic&quot;&gt;&lt;strong&gt;Переполнение/недополнение.&lt;/strong&gt; Необходимо помнить о возможных Overflow/Underflow при работе с большими числами или вычислениями. Подробней об этой уязвимости в смарт-контракте и как ее обойти &lt;a href=&quot;https://coffee-web.ru/blog/solving-the-integer-overflow-underflow-vulnerability-in-smart-contracts/&quot; target=&quot;_blank&quot;&gt;здесь.&lt;/a&gt;&lt;/li&gt;
      &lt;li id=&quot;5b1B&quot;&gt;&lt;strong&gt;При преобразовании&lt;/strong&gt; целочисленного типа большего размера в меньший - биты справа сохраняются, а биты слева теряются. &lt;/li&gt;
      &lt;li id=&quot;xk7B&quot;&gt;&lt;strong&gt;При преобразовании&lt;/strong&gt; типов байтов происходит обратное. Когда больший тип байта преобразуется в меньший тип, первые байты сохраняются, а последние теряются. При преобразовании меньшего байта в больший справа добавляются нулевые байты.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;ul id=&quot;V9sa&quot;&gt;
      &lt;li id=&quot;5ezX&quot;&gt;&lt;strong&gt;Приоритет:&lt;/strong&gt; Лучше использовать порядок операций PEMDAS чем BODMAS. (основное различие между ними заключается в приоритете (умножение или деление) и приоритете (сложение или вычитание)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;
  &lt;p id=&quot;Gb44&quot;&gt;&lt;strong&gt;PEMDAS&lt;/strong&gt;  - аббревиатура, используемые для запоминания порядка математических операций.&lt;/p&gt;
  &lt;p id=&quot;8b52&quot;&gt;PEMDAS расшифровывается как:&lt;/p&gt;
  &lt;p id=&quot;2FP2&quot;&gt;- P: Parentheses (скобки)&lt;/p&gt;
  &lt;p id=&quot;znBH&quot;&gt;- E: Exponents (степени)&lt;/p&gt;
  &lt;p id=&quot;QWz5&quot;&gt;- M: Multiplication (умножение)&lt;/p&gt;
  &lt;p id=&quot;yBT9&quot;&gt;- D: Division (деление)&lt;/p&gt;
  &lt;p id=&quot;2pqF&quot;&gt;- A: Addition (сложение)&lt;/p&gt;
  &lt;p id=&quot;wnc3&quot;&gt;- S: Subtraction (вычитание)&lt;/p&gt;
  &lt;p id=&quot;HxOk&quot;&gt;Это специальный порядок операций, который используется при выполнении математических выражений, чтобы определить, какие операции выполнять первыми.&lt;/p&gt;
  &lt;blockquote id=&quot;haPS&quot;&gt;Порядок старшинства операторов (&lt;a href=&quot;https://docs.soliditylang.org/en/latest/types.html#order-of-precedence-of-operators&quot; target=&quot;_blank&quot;&gt;Link&lt;/a&gt;)&lt;/blockquote&gt;
  &lt;h2 id=&quot;cY4E&quot;&gt;Операторы сравнения&lt;/h2&gt;
  &lt;p id=&quot;boy0&quot;&gt;Операторы сравнения в Solidity действуют как детективы, ищущие истину, оценивая отношения между значениями и возвращая логические результаты (истина или ложь). Они необходимы для создания условной логики и обеспечения целостности контракта.&lt;/p&gt;
  &lt;blockquote id=&quot;wXr7&quot;&gt;Предположим, что переменная A содержит 10, а переменная B содержит 20, тогда -&lt;/blockquote&gt;
  &lt;figure id=&quot;uBNJ&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a6/94/a69415cb-1f4a-4bc8-8e1b-8b8d6fbe4103.png&quot; width=&quot;691&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;mW3C&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0f/24/0f246e3e-e040-42e1-a68f-322fd15315ad.png&quot; width=&quot;677&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;2Q2r&quot;&gt;В приведенном ниже контракте &lt;em&gt;&lt;code&gt;RelationalOperator&lt;/code&gt;&lt;/em&gt; демонстрируется вышеупомянутые различные типы реляционных операторов (сравнения)&lt;/p&gt;
  &lt;pre id=&quot;lR8b&quot; data-lang=&quot;javascript&quot;&gt;// SPDX-License-Identifier: MIT
pragma solidity &amp;gt;=0.8.23;

contract RelationalOperator {

    // Объявление переменных
    uint16 public a = 20;
    uint16 public b = 10;
    
    // Инициализация переменной 
    // с логическим значением равенства a и b 
    bool public eq = a == b;
    
    // Инициализация переменной
    // с логическим значением неравенства a и b 
    bool public noteq = a != b;
    
    // Инициализация переменной 
    // с логическим значением a больше b
    bool public gtr = a &amp;gt; b;
    
    // Инициализация переменной
    // с логическим значением a меньше b
    bool public les = a &amp;lt; b;
    
    // Инициализация переменной
    // с логическим значением a больше или равно b
    bool public gtreq = a &amp;gt;= b;
    
    // Инициализация переменной
    // с логическим значением a меньше или равно b
    bool public leseq = a &amp;lt;= b;
    
}&lt;/pre&gt;
  &lt;figure id=&quot;9dGh&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/73/ed/73ed0f5d-be86-46f0-86c5-ff2c225a71ef.png&quot; width=&quot;187&quot; /&gt;
    &lt;figcaption&gt;Значения типов операторов сравнения&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;xdZn&quot;&gt;Ключевые моменты:&lt;/p&gt;
    &lt;ul id=&quot;H4Ah&quot;&gt;
      &lt;li id=&quot;aFdK&quot;&gt;&lt;strong&gt;Совместимость типов данных:&lt;/strong&gt;  Сравниваемые значения относятся к совместимым типам данных. Сравнение несовместимых типов может привести к неожиданным результатам.&lt;/li&gt;
      &lt;li id=&quot;TtGD&quot;&gt;&lt;strong&gt;Строгое равенство:&lt;/strong&gt;  Solidity использует строгие проверки равенства значений. Например, &lt;code&gt;0&lt;/code&gt; не считается равным &lt;code&gt;false&lt;/code&gt;.&lt;/li&gt;
      &lt;li id=&quot;dZM5&quot;&gt;&lt;strong&gt;Сравнение адресов:&lt;/strong&gt;  Используйте  &lt;code&gt;==&lt;/code&gt; оператор для прямого сравнения адресов.&lt;br /&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;
  &lt;p id=&quot;MceR&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;gEMl&quot;&gt;Логические операторы&lt;/h2&gt;
  &lt;p id=&quot;ToEW&quot;&gt;Логические операторы в Solidity — мастера принятия сложных решений, позволяющие создавать сложную условную логику в смарт-контрактах. Они действуют как логические часовые, оценивая условия и определяя, какие пути кода выполнять. Используются для объединения двух или более условий.&lt;/p&gt;
  &lt;blockquote id=&quot;RN3u&quot;&gt;Предположим, что переменная A содержит 10, а переменная B содержит 20, тогда -&lt;/blockquote&gt;
  &lt;figure id=&quot;11LP&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/01/45/014507d1-446e-471b-8aa3-0876579fdacf.png&quot; width=&quot;594&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;dFpu&quot;&gt;В приведенном ниже примере контракт&lt;em&gt; &lt;code&gt;logicalOperator&lt;/code&gt;&lt;/em&gt; демонстрирует вышеупомянутые различные типы логических операторов.&lt;/p&gt;
  &lt;pre id=&quot;RlvZ&quot; data-lang=&quot;javascript&quot;&gt;  // SPDX-License-Identifier: MIT
pragma solidity &amp;gt;=0.8.23;
  
  contract logicalOperator{
  
  // Определение функции для демонстрации 
  // Логический оператор
  function Logic(
  bool a, bool b) public view returns(
  bool, bool, bool){
    
  // Логический оператор И
  bool and = a&amp;amp;&amp;amp;b;
    
  // Логический оператор ИЛИ
  bool or = a||b;
    
  // Логический оператор НЕ
  bool not = !a;
  return (and, or, not);
  }
}
&lt;/pre&gt;
  &lt;figure id=&quot;VFcj&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ac/d5/acd57e40-b88e-45f4-b044-f6847868d43b.png&quot; width=&quot;378&quot; /&gt;
    &lt;figcaption&gt;Случай 1: Когда a - истинно,  b - истинно&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;j40S&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7d/d6/7dd66e0b-db9b-4ee9-872a-ed802c19f47a.png&quot; width=&quot;377&quot; /&gt;
    &lt;figcaption&gt;Случай 2: Когда a - ложно,  b - истинно&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;249F&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/81/3a/813a4321-b8f4-43df-a6b8-b7e671a62159.png&quot; width=&quot;340&quot; /&gt;
    &lt;figcaption&gt;Случай 3: Когда a - нулевое (ложь),  b - ненулевое (истина)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;voOH&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3a/b8/3ab829a1-95f7-4f3c-a4e0-71a78c5d1e1d.png&quot; width=&quot;377&quot; /&gt;
    &lt;figcaption&gt;Случай 4: Когда a - ложно,  b - ложно&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;prPR&quot;&gt;Ключевые моменты:&lt;/p&gt;
    &lt;ul id=&quot;Bdl7&quot;&gt;
      &lt;li id=&quot;zulA&quot;&gt;&lt;strong&gt;Типы операндов:&lt;/strong&gt; Логические операторы в основном работают с логическими значениями (&lt;code&gt;true&lt;/code&gt; или&lt;code&gt;false&lt;/code&gt;). Однако Solidity может неявно преобразовывать &lt;code&gt;ненулевые числа &lt;/code&gt;в &lt;code&gt;true&lt;/code&gt; и &lt;code&gt;0&lt;/code&gt; в &lt;code&gt;false&lt;/code&gt; в определенных контекстах.&lt;/li&gt;
      &lt;li id=&quot;bkYE&quot;&gt;&lt;strong&gt;Упрощенная оценка:&lt;/strong&gt; Solidity использует short-circuit для операторов &lt;code&gt;И&lt;/code&gt; и &lt;code&gt;ИЛИ&lt;/code&gt;. Это означает, что он оценивает второй операнд только в случае необходимости для определения окончательного результата.&lt;/li&gt;
      &lt;li id=&quot;KMPp&quot;&gt;&lt;strong&gt;Приоритет:&lt;/strong&gt; Логические операторы имеют более низкий приоритет, чем операторы сравнения. Используйте круглые скобки, чтобы уточнить порядок вычислений при объединении разных операторов.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;
  &lt;h2 id=&quot;wVk5&quot;&gt;&lt;/h2&gt;
  &lt;h2 id=&quot;r4gs&quot;&gt;Побитовые операторы&lt;/h2&gt;
  &lt;p id=&quot;bvJ9&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;WSIW&quot;&gt;Побитовые операторы в Solidity предлагают детальный способ управления отдельными битами двоичных данных, позволяя выполнять точные операции и оптимизацию в смарт-контрактах. &lt;/p&gt;
  &lt;blockquote id=&quot;FvO5&quot;&gt;Предположим, что переменная A содержит 2, а переменная B содержит 3, тогда -&lt;/blockquote&gt;
  &lt;p id=&quot;SHw5&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;lcis&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/20/f9/20f9c048-4201-4b03-9023-5f81fc777f64.png&quot; width=&quot;653&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;xtaf&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/18/76/18761301-ef28-4423-b220-56ef27b4091d.png&quot; width=&quot;653.8205980066446&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;ucyi&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/37/53/3753d5dc-e52e-4ab0-a6f4-756d0a91c47e.png&quot; width=&quot;649&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;1ecO&quot;&gt;В приведенном ниже примере контракт&lt;em&gt; &lt;code&gt;Bitwise&lt;/code&gt;&lt;/em&gt; демонстрирует вышеупомянутые различные типы побитовых операторов.&lt;/p&gt;
  &lt;pre id=&quot;JKdF&quot; data-lang=&quot;javascript&quot;&gt;// SPDX-License-Identifier: MIT
pragma solidity &amp;gt;=0.8.23;

contract Bitwise {

  // Объявление переменных
  uint16 public a = 20;
  uint16 public b = 10;
  
  // Объявление переменных
  // to &amp;#x27;&amp;amp;&amp;#x27; value
  uint16 public and = a &amp;amp; b;
  
  // Объявление переменных 
  // to &amp;#x27;|&amp;#x27; value
  uint16 public or = a | b;
  
  // Объявление переменных
  // to &amp;#x27;^&amp;#x27; value
  uint16 public xor = a ^ b;
  
  // Объявление переменных
  // to &amp;#x27;&amp;lt;&amp;lt;&amp;#x27; value
  uint16 public leftshift = a &amp;lt;&amp;lt; b;
  
  // Объявление переменных 
  // to &amp;#x27;&amp;gt;&amp;gt;&amp;#x27; value
  uint16 public rightshift = a &amp;gt;&amp;gt; b;
  
  // Объявление переменных
  // to &amp;#x27;~&amp;#x27; value
  uint16 public not = ~a;
  
}&lt;/pre&gt;
  &lt;figure id=&quot;GPOV&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7a/69/7a695257-5770-4e04-aa16-d800fb2a72b5.png&quot; width=&quot;241&quot; /&gt;
    &lt;figcaption&gt;Типы побитовых операторов&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;dNrb&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;kuqH&quot;&gt;Операторы присваивания&lt;/h2&gt;
  &lt;p id=&quot;izIa&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;EVYw&quot;&gt;Эти операторы предназначены для присвоения значения переменной. Операнд слева является &lt;code&gt;переменной&lt;/code&gt;, а операнд справа — &lt;code&gt;значением.&lt;/code&gt;&lt;/p&gt;
  &lt;blockquote id=&quot;7pja&quot;&gt;Поддерживает следующие операторы присваивания -&lt;/blockquote&gt;
  &lt;figure id=&quot;efEL&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/59/e1/59e174c6-a192-46f1-b0c0-90f346314e9d.png&quot; width=&quot;536&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;Ifsl&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/77/f8/77f85dcc-94b6-4fcb-8f89-045c6c81fed2.png&quot; width=&quot;545.0637119113574&quot; /&gt;
  &lt;/figure&gt;
  &lt;blockquote id=&quot;sIix&quot;&gt;Примечание: Та же логика применяется к побитовым операторам, поэтому они будут выглядеть как &amp;lt;&amp;lt; =, &amp;gt;&amp;gt; =, &amp;gt;&amp;gt; =, &amp;amp; =, | = , ^ =.&lt;/blockquote&gt;
  &lt;p id=&quot;gLD7&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;SQFa&quot;&gt;В приведенном ниже контракте &lt;em&gt;&lt;code&gt;AssignmentOperator&lt;/code&gt;&lt;/em&gt; демонстрируется вышеупомянутые различные типы операторов присваивания.&lt;/p&gt;
  &lt;pre id=&quot;i5g7&quot; data-lang=&quot;javascript&quot;&gt;// SPDX-License-Identifier: MIT
pragma solidity &amp;gt;=0.8.23;
contract AssignmentOperator {    
    
    // Объявление переменных
    uint16 public assignment = 20;
    uint public assignment_add = 50;
    uint public assign_sub = 50;
    uint public assign_mul = 10;
    uint public assign_div = 50;
    uint public assign_mod = 32;
  
    // Определение функции для
    // демонстраии операторов присвоения
    function getResult() public{
        assignment_add += 10;
        assign_sub -= 20;
        assign_mul *= 10;
        assign_div /= 10;
        assign_mod %= 20;
        return;
    }
}&lt;/pre&gt;
  &lt;figure id=&quot;fGGC&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/45/01/450184b1-1ac7-4ad9-9367-52f5676ad607.png&quot; width=&quot;295&quot; /&gt;
    &lt;figcaption&gt;Значения до вызова функции&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;ldH7&quot; class=&quot;m_custom&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5a/b8/5ab86a59-cd4c-4d6c-aa5c-6012606a155a.png&quot; width=&quot;193&quot; /&gt;
    &lt;figcaption&gt;Значения после вызова функиции&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;rmTB&quot;&gt;&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;heFm&quot;&gt;Ключевые моменты:&lt;/p&gt;
    &lt;ul id=&quot;Uv33&quot;&gt;
      &lt;li id=&quot;fKLS&quot;&gt;&lt;strong&gt;Порядок оценки:&lt;/strong&gt; Сначала вычисляется выражение справа, затем результат присваивается переменной слева.&lt;/li&gt;
      &lt;li id=&quot;T0eN&quot;&gt;&lt;strong&gt;Возвращаемое значение:&lt;/strong&gt;  Операторы присваивания не возвращают значение, поэтому их нельзя использовать непосредственно в выражениях.&lt;/li&gt;
      &lt;li id=&quot;R1L3&quot;&gt;&lt;strong&gt;Совместимость типов данных:&lt;/strong&gt;  Убедитесь, что назначаемое значение совместимо с типом данных переменной, чтобы избежать ошибок.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;
  &lt;h2 id=&quot;rAWA&quot;&gt;&lt;/h2&gt;
  &lt;h2 id=&quot;UW2O&quot;&gt;Условные (или тернарные) операторы&lt;/h2&gt;
  &lt;p id=&quot;FS0l&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;3iAu&quot;&gt;Тернарный оператор  — это оператор, который принимает три операнда. Тернарные операторы пригодятся, если нужно написать простой оператор if-else в одну строку.&lt;/p&gt;
  &lt;blockquote id=&quot;ZJQF&quot;&gt;*Конструкция &lt;code&gt;if-else&lt;/code&gt; способна проверить одно или же несколько условий и в случае если условие не будет верным, то выполнить другой код или проверить другое условие.&lt;/blockquote&gt;
  &lt;p id=&quot;2Vpr&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;6lSF&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/68/c1/68c186be-ff9a-4092-a666-1fb251f997fd.png&quot; width=&quot;694&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;jahG&quot;&gt;В приведенном ниже примере контракт&lt;em&gt; &lt;strong&gt;&lt;code&gt;Conditional&lt;/code&gt;&lt;/strong&gt;&lt;/em&gt;демонстрирует условный оператор.&lt;/p&gt;
  &lt;pre id=&quot;7i1m&quot; data-lang=&quot;javascript&quot;&gt;// SPDX-License-Identifier: MIT
pragma solidity &amp;gt;=0.8.23;
 
// Creating a contract
contract Conditional{
 
     // Определение функции для демонстрации
     // условного оператора
     function subtract(
       uint a, uint b) public view returns(
       uint){
      uint result = (a &amp;gt; b? a-b : b-a);
      return result;
 }
}&lt;/pre&gt;
  &lt;figure id=&quot;xzTp&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e0/f9/e0f90ef5-6b2b-4a7d-be9d-40063367e947.png&quot; width=&quot;331&quot; /&gt;
    &lt;figcaption&gt;Разность чисел a и b&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;blockquote id=&quot;KLMi&quot;&gt;Функция subtract принимает два аргумента типа uint и возвращает их разность. Она использует условный оператор для определения модуля разности чисел a и b. Если a больше b, то возвращается разность a - b, иначе возвращается разность b - a.&lt;/blockquote&gt;
  &lt;p id=&quot;BcSq&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;9aEu&quot;&gt;&lt;strong&gt;Пример: тройная цепочка операторов&lt;/strong&gt;&lt;/p&gt;
  &lt;blockquote id=&quot;OEbJ&quot;&gt;(условие 1) ? оператор 1: ((условие 2) ? оператор 2: оператор 3);&lt;/blockquote&gt;
  &lt;pre id=&quot;nf8n&quot; data-lang=&quot;javascript&quot;&gt;  // SPDX-License-Identifier: MIT
pragma solidity &amp;gt;=0.8.23;

// Контракт на демонстрацию оператора Solidity
// На данный момент этот контракт просто показывает, как
// реализовать тройную цепочку операторов
contract TripleChain {
  constructor() {}
  
  function getResult() public pure returns (string memory) {
    
    // Этот код возвращает строку
    // если a &amp;gt; b, мы возвращаем «a больше»
    // иначе, если a == b, мы возвращаем «a и b равны»
    // иначе b &amp;gt; a мы возвращаем «b больше»
    uint256 a = 200;
    uint256 b = 400;
  
    return (a &amp;gt; b ? &amp;quot;a is bigger&amp;quot; : ((a==b) ? 
        &amp;quot;a and b are equal&amp;quot; : &amp;quot;b is bigger&amp;quot; ));
  }
}&lt;/pre&gt;
  &lt;figure id=&quot;a39H&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a4/ea/a4ea7993-b58a-427b-94e7-70b92da39bfb.png&quot; width=&quot;290&quot; /&gt;
    &lt;figcaption&gt;Случай когда: b больше&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;tytk&quot;&gt;&lt;strong&gt;условие 1&lt;/strong&gt; — a&amp;gt;b, &lt;strong&gt;условие 2&lt;/strong&gt; — a==b.&lt;/p&gt;
    &lt;p id=&quot;qEwL&quot;&gt;&lt;strong&gt;утверждение 1&lt;/strong&gt; — «а больше»,   &lt;strong&gt;утверждение 2 &lt;/strong&gt;— «а и b равны», &lt;/p&gt;
    &lt;p id=&quot;Tykl&quot;&gt;&lt;strong&gt;утверждение 3&lt;/strong&gt; — «b больше».&lt;/p&gt;
  &lt;/section&gt;
  &lt;blockquote id=&quot;U6lo&quot;&gt;После того когда ознакомились со всеми ключевыми операторами, приступим к смарт-контракту &lt;em&gt;&lt;code&gt;Calculator&lt;/code&gt; &lt;/em&gt;&lt;/blockquote&gt;
  &lt;h2 id=&quot;fMXK&quot;&gt;&lt;/h2&gt;
  &lt;h2 id=&quot;YDZB&quot;&gt;Калькулятор&lt;/h2&gt;
  &lt;p id=&quot;sFGL&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;5uNm&quot;&gt;В приведенном ниже примере контракт&lt;em&gt; &lt;code&gt;Calculator&lt;/code&gt; &lt;/em&gt;демонстрирует:&lt;/p&gt;
  &lt;blockquote id=&quot;8jvO&quot;&gt;Сложение, вычитание, умножение, деление, возведение в степень, извлечения квадратного корня, округления числа до десятков, сотен, тысяч и т.д.&lt;/blockquote&gt;
  &lt;p id=&quot;bLKt&quot;&gt;&lt;/p&gt;
  &lt;pre id=&quot;fw1K&quot; data-lang=&quot;javascript&quot;&gt;// SPDX-License-Identifier: MIT
pragma solidity &amp;gt;=0.8.23;

contract Calculator {
// Исходное значение калькулятора равно нулю.
    uint256 result = 0; 
// Функция add позволяет прибавить к результату указанное число.
    function add(uint256 num) public { 
        result += num; 
    }
// Функция subtract позволяет вычесть из результата указанное число.
     function subtract(uint256 num) public {
        result -= num; 
    }
// Функция multiply позволяет умножить текущий 
// результат на указанное число.
     function multiply(uint256 num) public {
        result *= num; 
    }
// На выходе контракта возвращается значение 
// текущего результата или значение вычислений.
    function getResult() public view returns (uint256) {
        return result;
    }
// Функция divide позволяет разделить текущий результат
// на указанное число, с проверкой на ноль.
    function divide(uint256 num) public {
    require(num != 0, &amp;quot;Cannot divide by zero&amp;quot;);
    result /= num; 
    }
// Функция exponential позволяет возвести число 
// в указанную степень.
    function exponential(uint256 base, uint256 exponent) public {
    result = uint256(1);
        for(uint256 i = 0; i &amp;lt; exponent; i++){
        result *= base;
        }
    }
// Функция squareRoot позволяет получить квадратный корень из числа,
// возвращая только частное, отбрасывая остаток.
    function squareRoot(uint256 num) public view returns (uint256) {
    uint256 x = num;
    uint256 y = (x + 1) / 2;
    while (y &amp;lt; x) {
        x = y;
        y = (x + num / x) / 2;
    }
    return x;
    }
// Функция round позволяет округлить число 
// до десятков, сотен, тысяч и т.д.
    function round(uint256 num, uint256 decimalPlaces) public pure returns (uint256) {
        uint256 precision = 10**decimalPlaces;
        return (num + precision / 2) / precision * precision;
    }
}&lt;/pre&gt;
  &lt;p id=&quot;svqP&quot;&gt;&lt;strong&gt;Функция сложения&lt;/strong&gt; &amp;quot;&lt;code&gt;add&lt;/code&gt;&amp;quot; принимает один параметр типа &lt;code&gt;uint256&lt;/code&gt; под названием &lt;code&gt;num&lt;/code&gt;. Имеет модификатор &lt;code&gt;public&lt;/code&gt;, что означает, что она доступна для вызова извне контракта.&lt;/p&gt;
  &lt;p id=&quot;jbix&quot;&gt;В теле функции используется оператор &lt;code&gt;+=&lt;/code&gt;, который является сокращенной формой записи для операции сложения с присваиванием. В данном случае, &lt;code&gt;result += num&lt;/code&gt; означает, что значение переменной &lt;code&gt;result&lt;/code&gt; увеличивается на значение, переданное в аргументах функции &lt;code&gt;(num)&lt;/code&gt;. Это эквивалентно записи &lt;code&gt;result = result + num;&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;2nw7&quot;&gt;Таким образом, функция &lt;code&gt;add&lt;/code&gt; позволяет увеличить текущее значение &lt;code&gt;result&lt;/code&gt; на значение, переданное в качестве аргумента.&lt;/p&gt;
  &lt;blockquote id=&quot;iAR1&quot;&gt;Логика функций вычитания и умножения аналогична функции сложения. (Меняются только операторы присваивания)&lt;/blockquote&gt;
  &lt;p id=&quot;EXiV&quot;&gt;&lt;strong&gt;Функция деления&lt;/strong&gt; &amp;quot;&lt;code&gt;divide&lt;/code&gt;&amp;quot; начинается с проверки с использованием функции &lt;code&gt;require&lt;/code&gt;, чтобы убедиться, что аргумент &lt;code&gt;num&lt;/code&gt; не равен нулю, иначе функция &lt;code&gt;divide&lt;/code&gt;прервет свое выполнение, выдав ошибку &amp;quot;&lt;code&gt;Cannot divide by zero&lt;/code&gt;&amp;quot;.&lt;/p&gt;
  &lt;p id=&quot;8zsa&quot;&gt;Далее в теле функции используется оператор &lt;code&gt;/=&lt;/code&gt;, который является сокращенной формой записи для операции деления с присваиванием. &lt;code&gt;result /= num&lt;/code&gt; означает, что значение переменной &lt;code&gt;result&lt;/code&gt; делится на значение, переданное в аргументах функции (&lt;code&gt;num&lt;/code&gt;) и результат присваивается обратно переменной &lt;code&gt;result&lt;/code&gt;. Это эквивалентно записи &lt;code&gt;result = result / num.&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;eCyf&quot;&gt;Таким образом, функция &amp;quot;&lt;code&gt;divide&lt;/code&gt;&amp;quot; позволяет разделить текущее значение &lt;code&gt;result&lt;/code&gt; на значение, переданное в качестве аргумента, при условии, что значение аргумента не равно нулю.&lt;/p&gt;
  &lt;p id=&quot;nCjH&quot;&gt;&lt;strong&gt;Функция возведения в степень&lt;/strong&gt; принимает два аргумента: &lt;code&gt;base&lt;/code&gt; (основание) и &lt;code&gt;exponent &lt;/code&gt;(показатель степени) и используется для вычисления степени числа. Функция выполняет умножение &lt;code&gt;base &lt;/code&gt;на само себя &lt;code&gt;exponent &lt;/code&gt;раз и сохраняет результат в переменную &lt;code&gt;result.&lt;/code&gt; Таким образом, функция возводит число &lt;code&gt;base&lt;/code&gt; в степень &lt;code&gt;exponent.&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;FTfp&quot;&gt;&lt;strong&gt;Функция квадратного корня&lt;/strong&gt; выполняет вычисление из числа &lt;code&gt;num&lt;/code&gt; с использованием метода Ньютона:&lt;/p&gt;
  &lt;p id=&quot;HgQX&quot;&gt;Переменная &lt;code&gt;x&lt;/code&gt; инициализируется значением числа&lt;code&gt;num&lt;/code&gt;. Затем переменная &lt;code&gt;y&lt;/code&gt; вычисляется как&lt;code&gt;(x+1) / 2.&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;P6ZU&quot;&gt;Затем в цикле &lt;code&gt;while&lt;/code&gt; проверяется условие &lt;code&gt;y &amp;lt; x.&lt;/code&gt; Внутри цикла &lt;code&gt;x&lt;/code&gt; присваивается значение &lt;code&gt;y&lt;/code&gt;, а затем &lt;code&gt;y&lt;/code&gt; вычисляется как среднее арифметическое между &lt;code&gt;x&lt;/code&gt; и &lt;code&gt;num / x.&lt;/code&gt; Это повторяется до тех пор, пока значение &lt;code&gt;y&lt;/code&gt; не станет больше или равно &lt;code&gt;x.&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;vceR&quot;&gt;После выполнения цикла функция возвращает значение &lt;code&gt;x,&lt;/code&gt; которое и будет приближенным значением квадратного корня из числа &lt;code&gt;num,&lt;/code&gt; полученным методом Ньютона.&lt;/p&gt;
  &lt;p id=&quot;FGE4&quot;&gt;&lt;strong&gt;Функция округления&lt;/strong&gt; принимает два параметра:&lt;code&gt;num&lt;/code&gt;число, которое нужно округлить) и &lt;code&gt;decimalPlaces&lt;/code&gt;(число = количество нулей, на сколько нужно округлить, округление до десятков, до сотен, до тысяч и т.д.)&lt;/p&gt;
  &lt;p id=&quot;fbfr&quot;&gt;Внутри функции создается переменная &lt;code&gt;precision&lt;/code&gt;, которая равна &lt;code&gt;10&lt;/code&gt; в степени &lt;code&gt;decimalPlaces&lt;/code&gt;. Это используется для определения точности округления.&lt;/p&gt;
  &lt;p id=&quot;ItkT&quot;&gt;Затем функция возвращает результат округления числа &lt;code&gt;num&lt;/code&gt; до заданной цифры разряда. Для этого к числу &lt;code&gt;num&lt;/code&gt; добавляется &lt;code&gt;precision / 2&lt;/code&gt;, затем результат делится на &lt;code&gt;precision&lt;/code&gt; и умножается на &lt;code&gt;precision&lt;/code&gt;, чтобы получить округленное число. Это позволяет округлить число до нужной точности.&lt;/p&gt;
  &lt;p id=&quot;RRcT&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;wEdQ&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/25/57/25570989-55ce-4b20-8b75-feb35f5be5ec.png&quot; width=&quot;279&quot; /&gt;
    &lt;figcaption&gt;Исходное значение калькулятора равно 0&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;rDRL&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f3/fc/f3fc6841-cec4-4335-a5a3-4d769cea8a18.png&quot; width=&quot;279&quot; /&gt;
    &lt;figcaption&gt;Использование функции сложения (add 10)&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;xeYE&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ac/ff/acffee4b-fb40-4677-bc50-bcc3ec052698.png&quot; width=&quot;281&quot; /&gt;
    &lt;figcaption&gt;Использование функции деления на 5&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;96Df&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b9/21/b921d7e6-5807-4ad1-88cf-cd7f65f4fbd9.png&quot; width=&quot;287&quot; /&gt;
    &lt;figcaption&gt;Возведение 3 в 4 степень. getResult: 81&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;D0MS&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2d/10/2d106b22-3a55-4ca0-899c-30f84a35d845.png&quot; width=&quot;283&quot; /&gt;
    &lt;figcaption&gt;Функция умножения на 10 &lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;pC2Q&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/83/28/83289907-87a3-4ae5-8c1b-1a450aa01411.png&quot; width=&quot;280&quot; /&gt;
    &lt;figcaption&gt;Вычитание: 810-2=808&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;Frvy&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c6/c0/c6c0e178-e055-410d-873e-f940b258ee82.png&quot; width=&quot;290&quot; /&gt;
    &lt;figcaption&gt;Округление до сотен&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;saMw&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4d/92/4d927748-ca4c-46a1-9bdf-5352c7a05e00.png&quot; width=&quot;290&quot; /&gt;
    &lt;figcaption&gt;Округление до тысяч&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;EMVn&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7e/17/7e176df0-4c31-4717-a683-6a1e89c1ed60.png&quot; width=&quot;287&quot; /&gt;
    &lt;figcaption&gt;Вычисление квадратного корня из числа 1089&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;cVmf&quot;&gt;Вывод:&lt;/h2&gt;
  &lt;p id=&quot;lOAe&quot;&gt;Рассмотрели операторы Solidity. Они превращают простые данные в разумные решения и в логическое управление, где каждый тип оператора необходим под свои задачи. &lt;/p&gt;
  &lt;p id=&quot;J3gv&quot;&gt;Используются для изменения состояния контракта (например, изменения значения переменной &lt;code&gt;result&lt;/code&gt;), а также для возвращения значений, выполнение проверок (например, проверка деления на ноль в функции &lt;code&gt;divide&lt;/code&gt;) и выполнения вычислений в циклах (как в функции &lt;code&gt;exponential&lt;/code&gt;).&lt;/p&gt;
  &lt;p id=&quot;y9Ny&quot;&gt;Этот пример показывает, что операторы Solidity играют центральную роль в разработке функциональных и безопасных смарт-контрактов.&lt;/p&gt;

</content></entry><entry><id>nodiggity:0DwiHIAksXx</id><link rel="alternate" type="text/html" href="https://teletype.in/@nodiggity/0DwiHIAksXx?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=nodiggity"></link><title>Смарт-контракт для airdrop events.</title><published>2023-12-19T10:11:48.638Z</published><updated>2024-02-05T08:54:50.521Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/a8/e6/a8e6481a-490f-439f-b143-d470818d3df9.png"></media:thumbnail><category term="smart-kontrakty" label="Смарт-контракты"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/f1/02/f102092f-4f1b-4169-a0b8-664e9a6b375b.jpeg&quot;&gt;Скажем некое сообщество X планирует сделать раздачу eth для своих подписчиков. Чтобы каждый из них в течении месяца после определенных дат смог забрать свой дроп равный сумме, которую владелец паблика внесет на депозит (смарт-контракта) xBank, поделенное на количество участников события.</summary><content type="html">
  &lt;p id=&quot;gI4z&quot;&gt;Скажем некое сообщество X планирует сделать раздачу eth для своих подписчиков. Чтобы каждый из них в течении месяца после определенных дат смог забрать свой дроп равный сумме, которую владелец паблика внесет на депозит (смарт-контракта) &lt;code&gt;xBank&lt;/code&gt;, поделенное на количество участников события.&lt;/p&gt;
  &lt;figure id=&quot;dVGm&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b0/d8/b0d84654-3347-474e-bc5c-301084a3b39e.jpeg&quot; width=&quot;614&quot; /&gt;
  &lt;/figure&gt;
  &lt;pre id=&quot;vehb&quot; data-lang=&quot;javascript&quot;&gt;// SPDX-License-Identifier: MIT  
pragma solidity &amp;gt;=0.8.17;&lt;/pre&gt;
  &lt;pre id=&quot;yyeN&quot; data-lang=&quot;javascript&quot;&gt;contract AirdropEvent {
    uint8 public totalEligible; /* всего eligible участников (переменная 
    uint8 говорит о том, что возможно до 255 человек*/
    uint256 public xBank; /* внесенная общая сумма средств (владельцем), доступная 
    для распределения (может отличаться от текущего баланса контракта)*/
    address public owner; // адрес владельца контракта (владельца сообщества тг)&lt;/pre&gt;
  &lt;blockquote id=&quot;UP8k&quot;&gt;Cтруктура для хранения данных о каждом участнике, включая их username в telegram, дату и время разблокировки eth и информацию о том, получили ли они уже средства.&lt;/blockquote&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;TQ4Q&quot; data-lang=&quot;javascript&quot;&gt;    struct EligibleMember {
        string userNameTelegram;
        uint256 unlocking;
        bool alreadyGotMoney;
        bool exist;
    }&lt;/pre&gt;
  &lt;/section&gt;
  &lt;pre id=&quot;vjQM&quot; data-lang=&quot;javascript&quot;&gt;    address[] public arrEligibleMembers; /* массив для хранения адресов участников, 
    имеющих право на получение токенов.*/
    mapping(address =&amp;gt; EligibleMember) public eligibleMembers; 
    /* использует для хранения информации об участниках, 
    имеющих право на получение токенов, на основе их адреса кошелька.*/&lt;/pre&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;qE4i&quot;&gt;    constructor(){
        owner = msg.sender;
        totalEligible = 0;
    }&lt;/pre&gt;
  &lt;/section&gt;
  &lt;pre id=&quot;qrei&quot; data-lang=&quot;javascript&quot;&gt;    function addEligibleMember( /* функция используется владельцем контракта 
    для добавления участников, имеющих право на получение дропа.*/
        address walletAddress, // адрес кошелька участника
        string memory userNameTelegram, // username в телеграме
        uint256 unlocking // дата и время разблокировки в Unix Timestamp https://www.unixtimestamp.com/
    ) public onlyOwner {
        require(unlocking &amp;gt; 0, &amp;quot;The unlock date has not arrived&amp;quot;);
        require( /* проверка что дата разблокировки больше нуля 
        и что пользователя еще нет в списке участников. 
        Если обе проверки пройдены успешно, участник добавляется в 
        список и общее количество увеличивается*/
            eligibleMembers[walletAddress].exist == false,
            &amp;quot;Error! There is such a user&amp;quot;
        );
        eligibleMembers[walletAddress] = (
            EligibleMember(userNameTelegram, unlocking, false, true)
        );
        arrEligibleMembers.push(walletAddress);
        totalEligible++;
        emit NewEligibleMember(walletAddress, userNameTelegram, unlocking);
    } /*генерируется событие &amp;quot;NewEligibleMember&amp;quot;о добавлении нового участника. 
    Модификатор &amp;quot;onlyOwner&amp;quot; гарантирует, что только владелец контракта 
    может вызвать эту функцию. */&lt;/pre&gt;
  &lt;blockquote id=&quot;6IPP&quot;&gt;Функция для чтения определенного диапазона участников из массива.&lt;/blockquote&gt;
  &lt;pre id=&quot;ESaE&quot; data-lang=&quot;javascript&quot;&gt;
       function readEligibleMembersArray(uint cursor, uint length) public view returns (address[] memory) { 
        address[] memory array = new address[](length);
        uint totalEligible2 = 0;
        for (uint i = cursor; i &amp;lt; cursor+length; i++) {
            array[totalEligible2] = arrEligibleMembers[i];
            totalEligible2++;
        }
        return array;
    }&lt;/pre&gt;
  &lt;blockquote id=&quot;mvEV&quot;&gt;Функция claim эфира для участников, имеющих право на получение токенов после разблокировки.&lt;/blockquote&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;m3KV&quot;&gt;  function claim() public { 
        address payable walletAddress = payable(msg.sender);&lt;/pre&gt;
  &lt;/section&gt;
  &lt;pre id=&quot;4Lva&quot; data-lang=&quot;javascript&quot;&gt;        require(
            eligibleMembers[walletAddress].exist == true,
            &amp;quot;No such participant!&amp;quot;
        ); /* Проверка - существует ли участник с данным кошельком. 
        Если параметр exist (существует) равен false, 
        то будет выведено сообщение &amp;quot;Нет такого участника!&amp;quot; 
        и выполнение функции будет остановлено.*/
        require(
            block.timestamp &amp;gt; eligibleMembers[walletAddress].unlocking,
            &amp;quot;Unlocking hasn&amp;#x27;t happened yet!&amp;quot;
        ); /* Проверяет произошло ли уже разблокирование для данного участника. 
        Если текущее время (block.timestamp) не наступило, то будет выведено сообщение 
        &amp;quot;Разблокирование ещё не произошло!&amp;quot; и выполнение функции будет остановлено.*/
        require(
            eligibleMembers[walletAddress].alreadyGotMoney == false,
            &amp;quot;You have already received eth!&amp;quot;
        ); /* Получил ли участник уже эфир. Если параметр 
        alreadyGotMoney (уже получил) для участника с заданным кошельком 
        равен true, то будет выведено сообщение &amp;quot;Вы уже получили эфир!&amp;quot; 
        и выполнение функции будет остановлено.
        
        Таким образом, эти три проверки обеспечивают, что участник имеет право 
        получить свой дроп, иначе функция вызовет ошибку 
        и завершит своё выполнение.*/&lt;/pre&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;bHUw&quot; data-lang=&quot;javascript&quot;&gt;        uint256 amount = xBank / totalEligible;
        eligibleMembers[walletAddress].alreadyGotMoney = true;
        (bool success, ) = walletAddress.call{value: amount}(&amp;quot;&amp;quot;);
        require(success);
        emit GotMoney(walletAddress);
    }&lt;/pre&gt;
  &lt;/section&gt;
  &lt;blockquote id=&quot;b2q7&quot;&gt;&lt;code&gt; Проверка текущего баланса контракта.&lt;/code&gt;&lt;/blockquote&gt;
  &lt;pre id=&quot;h9XM&quot; data-lang=&quot;javascript&quot;&gt;function currentBalance() public view returns (uint256) {
        return address(this).balance; 
    }&lt;/pre&gt;
  &lt;pre id=&quot;q5wb&quot; data-lang=&quot;javascript&quot;&gt;    modifier onlyOwner() { /* модификатор для ограничения доступа к определенным функциям 
    (только для владельца контракта)*/
        require(msg.sender == owner, &amp;quot;You are not the owner&amp;quot;);
        _;
    }&lt;/pre&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;YYj1&quot; data-lang=&quot;javascript&quot;&gt;    receive() external payable { /*&amp;quot;запасная&amp;quot; функция для приема и сохранения поступающего эфира в xBank 
    для последующего распределения.*/
        xBank += msg.value;
    }&lt;/pre&gt;
  &lt;/section&gt;
  &lt;pre id=&quot;lsfn&quot; data-lang=&quot;javascript&quot;&gt;    //события
    event NewEligibleMember(address indexed walletAddress, string userNameTelegram, uint256 unlocking);
    event GotMoney(address indexed walletAddress);
    }&lt;/pre&gt;
  &lt;blockquote id=&quot;NEe0&quot;&gt;Конструкция &lt;code&gt;event&lt;/code&gt; в Solidity используется для объявления событий, которые могут быть инициированы в ходе выполнения функций в смарт-контракте. &lt;/blockquote&gt;
  &lt;p id=&quot;AGRA&quot;&gt;1. &lt;code&gt;event NewEligibleMember(address indexed walletAddress, string userNameTelegram, uint256 unlocking);&lt;/code&gt;&lt;br /&gt;* Это событие &lt;code&gt;NewEligibleMember&lt;/code&gt; инициируется при добавлении нового участника в список. &lt;br /&gt;* Он принимает три параметра: адрес кошелька, имя пользователя в Telegram и дату разблокировки.&lt;br /&gt;* Ключевое слово &lt;code&gt;indexed&lt;/code&gt; используется для обеспечения возможности эффективного поиска и фильтрации событий по указанному параметру.&lt;/p&gt;
  &lt;p id=&quot;bg5S&quot;&gt;2. &lt;code&gt;event GotMoney(address indexed walletAddress);&lt;/code&gt;&lt;br /&gt;* Это событие &lt;code&gt;GotMoney&lt;/code&gt;, которое будет вызвано в случае, если участник получит деньги.&lt;br /&gt;* Он принимает один параметр - адрес кошелька.&lt;br /&gt;* Также используется ключевое слово &lt;code&gt;indexed&lt;/code&gt; для этого параметра.&lt;/p&gt;
  &lt;blockquote id=&quot;tOsg&quot;&gt;Эти события могут быть подписаны во внешних приложениях или интерфейсах, чтобы отслеживать и реагировать на изменения в смарт-контракте.&lt;/blockquote&gt;
  &lt;p id=&quot;uZdf&quot;&gt;&lt;strong&gt;[1] Компиляция, деплой и функционал.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;2s1C&quot;&gt;Видим оранжевые и синие кнопки, через &lt;code&gt;addEligibleMember&lt;/code&gt; можем добавить данные подходящих участников: адрес кошелька, telegram username и дату unlocking например 18.12.2023 17:21:01 преобразованную в&lt;a href=&quot;https://www.unixtimestamp.com/&quot; target=&quot;_blank&quot;&gt; &lt;u&gt;Unix Timestamp&lt;/u&gt;&lt;/a&gt; &lt;code&gt;1702909261&lt;/code&gt; т.к. все вносится в ручную количество участников небольшое до 255.&lt;/p&gt;
  &lt;section&gt;
    &lt;figure id=&quot;cwoB&quot; class=&quot;m_custom&quot;&gt;
      &lt;img src=&quot;https://img3.teletype.in/files/29/4f/294f7c7c-3f68-4d63-8e29-6f2c76f2e766.png&quot; width=&quot;247.47853736089027&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;figure id=&quot;bmvr&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/43/67/4367bb00-d6fa-4842-9b81-4a31de6de7ad.png&quot; width=&quot;330&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;gJ8x&quot;&gt;&lt;strong&gt;[2] Добавим 3х человек с наступившей датой и 2х с разлоком на 25.12.2023&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;KFGl&quot;&gt;&lt;strong&gt;username1&lt;/strong&gt;&lt;br /&gt;0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2&lt;/p&gt;
  &lt;p id=&quot;BPc7&quot;&gt;18.12.2023 17:21:01&lt;br /&gt;&lt;code&gt;1702909261&lt;/code&gt;&lt;br /&gt;______________________________________&lt;br /&gt;&lt;strong&gt;username2&lt;/strong&gt;&lt;br /&gt;0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02db&lt;/p&gt;
  &lt;p id=&quot;v0Jl&quot;&gt;18.12.2023 17:21:01&lt;br /&gt;&lt;code&gt;1702909261&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;WGG5&quot;&gt;______________________________________&lt;br /&gt;&lt;strong&gt;username3&lt;/strong&gt;&lt;br /&gt;0x78731D3Ca6b7E34aC0F824c42a7cC18A495cabaB&lt;/p&gt;
  &lt;p id=&quot;fois&quot;&gt;18.12.2023 17:21:01&lt;br /&gt;&lt;code&gt;1702909261&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;UMZ4&quot;&gt;_______________________________________&lt;br /&gt;&lt;strong&gt;username4&lt;/strong&gt;&lt;br /&gt;0x617F2E2fD72FD9D5503197092aC168c91465E7f2&lt;/p&gt;
  &lt;p id=&quot;JQrI&quot;&gt;25.12.2023 01.11.11&lt;br /&gt;&lt;code&gt;1703455871&lt;/code&gt;&lt;br /&gt;________________________________________&lt;br /&gt;&lt;strong&gt;username5&lt;/strong&gt;&lt;br /&gt;0x17F6AD8Ef982297579C203069C1DbfFE4348c372&lt;/p&gt;
  &lt;p id=&quot;2owE&quot;&gt;25.12.2023 01.11.11&lt;br /&gt;&lt;code&gt;1703455871&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;2BmO&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0f/72/0f7257cc-02a7-476b-963a-f017cbcd2f5e.png&quot; width=&quot;291&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;QFu1&quot;&gt; *Функция для чтения определенного диапазона участников из массива.&lt;/p&gt;
  &lt;figure id=&quot;pPnX&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5f/51/5f5162a4-1c98-4b95-b96d-b4de373a295a.png&quot; width=&quot;320&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Fuss&quot;&gt;&lt;strong&gt;[3] Сlaim&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;5Inw&quot;&gt;&lt;u&gt;Username1&lt;/u&gt; успешно заклеймил 0,2 eth, на балансе контракта осталось 0,8. &lt;u&gt;username4 и username5&lt;/u&gt; смогут это сделать (25.12.)&lt;/p&gt;
  &lt;figure id=&quot;LmOs&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4e/cb/4ecbf07c-9091-4e71-8126-8f85bd76bb71.png&quot; width=&quot;328&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;bUVe&quot;&gt;&lt;strong&gt;[4] Вывод: &lt;/strong&gt; Смарт-контракт предоставляет базовую структуру для проведения аирдропа среди подписчиков (также возможно адаптировать под различные активности и мероприятия, добавлять больше данных о пользователях / ранжировать на группы по анлоку), где участники могут получить свои токены после определенной даты разблокировки.&lt;/p&gt;

</content></entry></feed>