<?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>MAKArti</title><author><name>MAKArti</name></author><id>https://teletype.in/atom/makartis</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/makartis?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@makartis?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=makartis"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/makartis?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-17T10:26:38.443Z</updated><entry><id>makartis:Not_Legal_Advice</id><link rel="alternate" type="text/html" href="https://teletype.in/@makartis/Not_Legal_Advice?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=makartis"></link><title>Не юридическая консультация ... Америка: самый креативный наркоман в мире</title><published>2021-09-05T06:34:24.768Z</published><updated>2021-09-05T06:34:24.768Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/7a/fb/7afbca4f-96c9-4c7a-b18e-efec327c6fee.jpeg"></media:thumbnail><category term="ton" label="TON"></category><tt:hashtag>qfsn</tt:hashtag><tt:hashtag>tanz</tt:hashtag><summary type="html">&lt;img src=&quot;https://images.cointelegraph.com/images/1434_aHR0cHM6Ly9zMy5jb2ludGVsZWdyYXBoLmNvbS91cGxvYWRzLzIwMjEtMDgvYTZjMTAyMmUtZjk4NS00NTIzLWE2OTAtMTU1YWUwNjNhM2Q1LmpwZw==.jpg&quot;&gt;Соединенным Штатам нужны десятки миллиардов долларов, и государство собирается забрать их у американского криптосообществе.
Оригинал.</summary><content type="html">
  &lt;p id=&quot;TAnz&quot;&gt;Соединенным Штатам нужны десятки миллиардов долларов, и государство собирается забрать их у американского криптосообществе.&lt;br /&gt;&lt;a href=&quot;https://cointelegraph.com/news/defi-literacy-universities-embrace-decentralized-finance-education&quot; target=&quot;_blank&quot;&gt;Оригинал.&lt;/a&gt;&lt;/p&gt;
  &lt;figure id=&quot;o5WC&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://images.cointelegraph.com/images/1434_aHR0cHM6Ly9zMy5jb2ludGVsZWdyYXBoLmNvbS91cGxvYWRzLzIwMjEtMDgvYTZjMTAyMmUtZjk4NS00NTIzLWE2OTAtMTU1YWUwNjNhM2Q1LmpwZw==.jpg&quot; width=&quot;1434&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ryaG&quot;&gt;МНЕНИЕ&lt;/p&gt;
  &lt;p id=&quot;qFsN&quot;&gt;&lt;em&gt;&lt;strong&gt;Not Legal Advice ...&lt;/strong&gt; - ежемесячная колонка Захари Кельмана, главного юрисконсульта Cointelegraph. Он имеет лицензию в Нью-Йорке и специализируется на политических, юридических и нормативных вопросах, связанных с биткойнами, цифровыми валютами и технологией блокчейн.&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;RwVK&quot;&gt;В течение двух десятилетий президенты Соединенных Штатов держали американские вооруженные силы в Афганистане для поддержки хрупкого местного правительства, которому было поручено сдерживать талибов. Ранее в этом месяце американские военные ушли, и афганское правительство, поддерживаемое вооруженными силами США, рухнуло, как разбитая палатка, столб которой был удален. Для всех наблюдателей было очевидно, что коренные изменения в Афганистане всегда невозможны, и американская военная разведка должна была знать эту неизбежную реальность. Неясно, почему именно в этот момент США окончательно отступили.&lt;/p&gt;
  &lt;p id=&quot;Zt2N&quot;&gt;Ответ может заключаться во все более мощной, но часто игнорируемой силе, влияющей на принятие решений в Вашингтоне, округ Колумбия: риск суверенного долга США. С 28 триллионами долларов валового национального долга, &lt;a href=&quot;https://cointelegraph.com/news/us-printed-more-money-in-one-month-than-in-two-centuries&quot; target=&quot;_blank&quot;&gt;беспрецедентной денежной эмиссией&lt;/a&gt; и количественным смягчением, а также десятилетиями низких процентных ставок Америка потратила большую часть своих денежных боеприпасов за последнее десятилетие. Это заставило политиков разбить стекло и позволить триллионам экстренных расходов напугать американских держателей суверенного долга, у которых внезапно появилось больше оснований опасаться некогда немыслимой перспективы краха суверенного долга Америки. В эту пустоту вступают президент Джо Байден и 117-й Конгресс США.&lt;/p&gt;
  &lt;p id=&quot;t0OA&quot;&gt;&lt;strong&gt;&lt;em&gt;Связанный: &lt;a href=&quot;https://cointelegraph.com/news/on-quantitative-easing-crypto-and-modern-monetary-theory&quot; target=&quot;_blank&quot;&gt;О количественном смягчении, криптографии и современной монетарной теории.&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;UKin&quot;&gt;Можно было бы подумать, что очевидный метод смягчения опасений держателя долга заключается в балансе за счет увеличения налоговых ставок или сокращения расходов. Однако повышение налогов и сокращение бюджета равносильно закрытию открытого бара на домашней вечеринке прямо тогда, когда становится весело. Выигрышной политической формулой здесь всегда является долговая расписка: повышение налогов расстраивает избирателей и подрывает оптимизм рынка, в то время как сокращение расходов заставляет политиков не выполнять обещания и ограничивает их доступ к соусовке. Однако, подобно умному наркоману, США всегда могут найти способ убедить назойливых казначейских держателей и держателей долговых обязательств, что Америка все еще «хороша для этого».&lt;/p&gt;
  &lt;p id=&quot;LAj8&quot;&gt;Прекращение войны в Афганистане может не привести напрямую к сокращению военного бюджета, но это действительно означает конец настроения, которое вызвало неумолимый иностранный интервенционизм Америки после 11 сентября. Завершая войну, Америка фактически сообщает миру, что она прекратила созависимые отношения, которые способствовали ее зависимости, без необходимости полностью бросить холодную индейку.&lt;/p&gt;
  &lt;p id=&quot;bnOX&quot;&gt;Точно так же бюджетные ястребы утверждают, что создание, возможно, невозможных требований к крипто-налоговой отчетности, изложенных в поправке к &lt;a href=&quot;https://cointelegraph.com/news/infrastructure-bill-passes-us-senate-without-clarification-on-crypto&quot; target=&quot;_blank&quot;&gt;недавнему законопроекту об инфраструктуре США&lt;/a&gt;приведет к тому, что федеральное правительство получит десятки миллиардов долларов «упущенных» доходов без необходимости повышения налоговых ставок. Поскольку повышение налогов посылает негативный рыночный сигнал, который наносит ущерб экономической стабильности, и поскольку расходование триллионов долларов без так называемых «окупаемости» посылает негативный сигнал осторожным держателям долговых обязательств США, это дает политикам возможность получить свой пирог и тоже ешь. Угроза перевернуть американское криптосообщество вверх дном и встряхнуть его до тех пор, пока не выйдут десятки миллиардов долларов - даже если их фактические неоплаченные налоговые счета составляют лишь небольшую часть этой суммы - может обеспечить временное облегчение обеспокоенным держателям долгов, которые, вероятно, сами являются крипто-новичками, без отвратительное бремя фактической финансовой ответственности.&lt;/p&gt;
  &lt;p id=&quot;6iEf&quot;&gt;&lt;strong&gt;&lt;em&gt;По теме: &lt;a href=&quot;https://cointelegraph.com/news/let-s-be-clear-blockchain-technology-is-infrastructure&quot; target=&quot;_blank&quot;&gt;Давайте проясним: технология Blockchain - это инфраструктура&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;1Ybt&quot;&gt;Любой, у кого были близкие родственники или друзья, страдающие от наркотической или игровой зависимости, знает разницу между реальным изменением привычек наркомана и поверхностными обещаниями и решениями, которые они используют, чтобы скрыть свою продолжающуюся зависимость. Мы знаем, насколько важны наша поддержка и оптимизм, и сохраняем надежду, пока не сгорим несколько раз, поскольку становится очевидным, что никаких фундаментальных сдвигов не произошло. По мере того, как старые инструменты денежно-кредитной политики заржавеют и изнашиваются, а Америка переходит к политике дикого количественного смягчения и беспрецедентных государственных расходов, у держателей долга Америки есть веские основания надеяться, что страна нашла способ продолжать двигаться вперед, особенно учитывая центральную роль доллара. положение в мировой валютной системе. Ради Америки,&lt;/p&gt;
  &lt;p id=&quot;QP4O&quot;&gt;&lt;em&gt;Эта статья предназначена для общих информационных целей и не предназначена и не должна восприниматься как юридическая консультация.&lt;/em&gt;&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;ZINt&quot;&gt;&lt;em&gt;&lt;strong&gt;Захари Кельман является генеральным советником Cointelegraph.  &lt;/strong&gt;Он юрист, специализирующийся на нормативно-правовой среде, окружающей цифровую валюту и финансовые технологии, будь то получение лицензий и разработка политик соответствия в соответствии с недавно разработанными законами на Филиппинах или встреча и разработка политик с регулирующими органами Карибского бассейна. До того, как стать соучредителем Kelman PLLC, он руководил программой соответствия для Coins.ph. Закари представлял и консультировал предпринимателей по передовой юридической практике их бизнеса в сфере финансовых технологий.&lt;/em&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;tt-tags id=&quot;hiUe&quot;&gt;
    &lt;tt-tag name=&quot;qfsn&quot;&gt;#qfsn&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;
  &lt;tt-tags id=&quot;0OZQ&quot;&gt;
    &lt;tt-tag name=&quot;tanz&quot;&gt;#tanz&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>makartis:NFT_biznes</id><link rel="alternate" type="text/html" href="https://teletype.in/@makartis/NFT_biznes?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=makartis"></link><title>Британский подросток зарабатывает почти 400 тысяч долларов на продажах NFT без банковского счета</title><published>2021-09-05T06:25:18.037Z</published><updated>2021-09-05T06:25:18.037Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/d3/5c/d35c2414-c649-4d52-b72b-5170f88e0a84.jpeg"></media:thumbnail><category term="ton" label="TON"></category><summary type="html">&lt;img src=&quot;https://images.cointelegraph.com/images/1434_aHR0cHM6Ly9zMy5jb2ludGVsZWdyYXBoLmNvbS91cGxvYWRzLzIwMjEtMDkvNmY4MTllMDQtNjM5Ny00YTI3LTllYTUtZTNiNmY0ODEzYzA4LmpwZw==.jpg&quot;&gt;Беньямин Ахмед создал и токенизировал цифровые изображения смайликов китов и продал их в форме NFT во время школьных каникул.</summary><content type="html">
  &lt;p id=&quot;Tlpn&quot;&gt;Беньямин Ахмед создал и токенизировал цифровые изображения смайликов китов и продал их в форме NFT во время школьных каникул.&lt;/p&gt;
  &lt;p id=&quot;MURK&quot;&gt;&lt;a href=&quot;https://cointelegraph.com/news/british-tween-earns-almost-400k-on-nft-sales-without-a-bank-account&quot; target=&quot;_blank&quot;&gt;Оригинал статьи.&lt;/a&gt;&lt;/p&gt;
  &lt;figure id=&quot;EUvK&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://images.cointelegraph.com/images/1434_aHR0cHM6Ly9zMy5jb2ludGVsZWdyYXBoLmNvbS91cGxvYWRzLzIwMjEtMDkvNmY4MTllMDQtNjM5Ny00YTI3LTllYTUtZTNiNmY0ODEzYzA4LmpwZw==.jpg&quot; width=&quot;1434&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ogOV&quot;&gt;НОВОСТИ&lt;/p&gt;
  &lt;p id=&quot;w2SF&quot;&gt;Сообщается, что 12-летний мальчик из Лондона заработал почти 400000 долларов, продав серию нематериальных токенов (NFT) во время школьных каникул.&lt;/p&gt;
  &lt;p id=&quot;FLn0&quot;&gt;В &lt;a href=&quot;https://www.geo.tv/latest/368295-british-pakistani-boy-12-makes-290000-during-summer-holidays&quot; target=&quot;_blank&quot;&gt;интервью&lt;/a&gt; Geo.tv Беньямин Ахмед поделился своим волнением по поводу возможности зарабатывать деньги в Интернете, продавая произведения искусства NFT, «не имея банковского счета». Работа Ахмеда привлекла внимание в Твиттере и в конечном итоге стала вирусной.&lt;/p&gt;
  &lt;p id=&quot;oGrk&quot;&gt;Ахмед использовал свои школьные каникулы для создания и токенизации цифровых изображений смайликов китов под брендом «Weird Whales», которые затем продавались в форме NFT в Интернете. Раньше ребенок токенизировал набор произведений искусства в стиле Minecraft, который не продавался на рынке из-за низкой популярности.&lt;/p&gt;
  &lt;p id=&quot;1l5Q&quot;&gt;Имран Ахмед, отец мальчика, как сообщается, учил Беньямина и его брата программированию с шести лет. Несмотря на то, что его сын не смог открыть банковский счет из-за возрастных ограничений, Имран сказал:&lt;/p&gt;
  &lt;blockquote id=&quot;DGh5&quot;&gt;«Он очень изобретателен, у него нет банковского счета и бухгалтера, поэтому он хранит свои деньги в онлайн-блокчейне».&lt;/blockquote&gt;
  &lt;p id=&quot;ooT9&quot;&gt;Более того, отец пояснил, что заявленная прибыль, полученная от продаж NFT, была конвертирована в эфир ( &lt;a href=&quot;https://cointelegraph.com/ethereum-price&quot; target=&quot;_blank&quot;&gt;ETH&lt;/a&gt; ), независимо от колебаний цен.&lt;/p&gt;
  &lt;p id=&quot;mzLO&quot;&gt;&lt;strong&gt;&lt;em&gt;По теме: &lt;a href=&quot;https://cointelegraph.com/news/minting-distributing-and-selling-nfts-must-involve-copyright-law&quot; target=&quot;_blank&quot;&gt;чеканка, распространение и продажа NFT должны включать закон об авторском праве.&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;re3B&quot;&gt;Недавний бум NFT невольно вернул неопределенность в крипто-экосистему. Как обсуждалось в обзоре, в среде NFT еще предстоит создать &lt;a href=&quot;https://cointelegraph.com/news/minting-distributing-and-selling-nfts-must-involve-copyright-law&quot; target=&quot;_blank&quot;&gt;инфраструктуру, которая уважает законы об авторском праве&lt;/a&gt; - как для создателей, так и для покупателей.&lt;/p&gt;
  &lt;p id=&quot;5p5P&quot;&gt;Одним из долгосрочных решений этой проблемы может быть привлечение организаций, специализирующихся на знаниях об авторском праве в разработке NFT. Однако эксперты утверждают, что этот шаг в конечном итоге затруднит доступность продаж NFT как для художников, так и для покупателей.&lt;/p&gt;

</content></entry><entry><id>makartis:DeFi</id><link rel="alternate" type="text/html" href="https://teletype.in/@makartis/DeFi?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=makartis"></link><title>Грамотность DeFi: университеты используют децентрализованное финансовое образование</title><published>2021-09-05T06:22:05.331Z</published><updated>2021-09-05T06:22:05.331Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/0b/f3/0bf39fb5-3606-40cc-a2bb-8dc1ac2c6599.jpeg"></media:thumbnail><category term="ton" label="TON"></category><summary type="html">&lt;img src=&quot;https://images.cointelegraph.com/images/1434_aHR0cHM6Ly9zMy5jb2ludGVsZWdyYXBoLmNvbS91cGxvYWRzLzIwMjEtMDgvMzBjM2EzNzUtY2E1OC00MzdkLTg0MmEtZmUxNGVhNzdmNDA5LmpwZw==.jpg&quot;&gt;Небольшое количество университетов начинают предлагать курсы DeFi, чтобы помочь студентам и широкой общественности лучше понять технологию.</summary><content type="html">
  &lt;p id=&quot;FtpO&quot;&gt;Небольшое количество университетов начинают предлагать курсы DeFi, чтобы помочь студентам и широкой общественности лучше понять технологию.&lt;/p&gt;
  &lt;p id=&quot;xzdK&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;TDA8&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://images.cointelegraph.com/images/1434_aHR0cHM6Ly9zMy5jb2ludGVsZWdyYXBoLmNvbS91cGxvYWRzLzIwMjEtMDgvMzBjM2EzNzUtY2E1OC00MzdkLTg0MmEtZmUxNGVhNzdmNDA5LmpwZw==.jpg&quot; width=&quot;1434&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;mTxm&quot;&gt;АНАЛИЗ&lt;/p&gt;
  &lt;p id=&quot;OTp4&quot;&gt;Децентрализованные финансы, или DeFi, стали одним из самых быстрорастущих секторов криптовалютной экосистемы. Данные  &lt;a href=&quot;https://dappradar.com/&quot; target=&quot;_blank&quot;&gt;показывают,&lt;/a&gt; что общая заблокированная стоимость (TVL) во всех протоколах DeFi сейчас составляет около 130 миллиардов долларов. Это важный показатель, поскольку некоторые аналитики рассматривают TVL как один из лучших способов &lt;a href=&quot;https://cointelegraph.com/news/defi-tvl-hits-a-record-157b-as-ethereum-competitors-attract-investors&quot; target=&quot;_blank&quot;&gt;измерения настроений в секторе DeFi&lt;/a&gt; .&lt;/p&gt;
  &lt;p id=&quot;VlZf&quot;&gt;Хотя рост очевиден, многие люди все еще могут задаться вопросом, что такое DeFi и как его можно применить сегодня. Пирс Ридьярд, генеральный директор Radix DLT - безопасной децентрализованной сети - заявил, что DeFi в настоящее время &lt;a href=&quot;https://cointelegraph.com/news/decentralized-finance-may-be-the-future-but-education-is-still-lacking&quot; target=&quot;_blank&quot;&gt;обслуживает только пользователей с достаточным знанием&lt;/a&gt; рынка криптографии.&lt;/p&gt;
  &lt;p id=&quot;oJ3F&quot;&gt;Имея это в виду, примечательно, что небольшое количество университетов теперь предлагают курсы, ориентированные на DeFi, чтобы помочь обучить зачисленных студентов и широкую публику основам децентрализованных систем.&lt;/p&gt;
  &lt;h2 id=&quot;aP1y&quot;&gt;Где можно узнать о DeFi&lt;/h2&gt;
  &lt;p id=&quot;CAVX&quot;&gt;Калифорнийский университет в Беркли недавно &lt;a href=&quot;https://defi-learning.org/&quot; target=&quot;_blank&quot;&gt;добавил&lt;/a&gt; массово открытый онлайн-курс, или MOOC, по децентрализованным финансам в свое семестровое предложение осенью 2021 года.&lt;/p&gt;
  &lt;p id=&quot;30VZ&quot;&gt;Дон Сонг, профессор электротехники и информатики в Калифорнийском университете в Беркли и основательница блокчейн-платформы Oasis Network, сказала Cointelegraph, что вместе с профессорами из Стэнфорда и Имперского колледжа Лондона будет помогать вести курс DeFi. По словам Сонга, DeFi становится принципиально новым способом построения финансовой инфраструктуры, поэтому для студентов во всем мире важно узнать об этой теме:&lt;/p&gt;
  &lt;blockquote id=&quot;KBTW&quot;&gt;«Около 300 студентов, изучающих информатику и финансы, записались на курс, но, учитывая огромный интерес DeFi, мы также предлагаем версию MOOC, открытую для всех во всем мире. В общей сложности более 1400 студентов записались на курс DeFi в Беркли ».&lt;/blockquote&gt;
  &lt;p id=&quot;PAwA&quot;&gt;Сонг упомянул, что Калифорнийский университет в Беркли ранее предлагал более короткий и более экспериментальный курс DeFi в течение весеннего семестра 2021 года. Она объяснила, что благодаря успеху и интересу этого класса университет теперь предлагает полный семестровый курс, охватывающий наиболее важные концепции DeFi.&lt;/p&gt;
  &lt;p id=&quot;gZHB&quot;&gt;«Первый сегмент курса будет посвящен введению в смарт-контакты и блокчейн. Второй сегмент - это ядро, где мы обсудим различные услуги DeFi, включая стейблкоины, децентрализованные биржи, децентрализованное кредитование и многое другое », - сказал Сонг, добавив:« Мы также рассмотрим оракулы и протокол конфиденциальности в DeFi, которые оказались большая тема в последнее время ».&lt;/p&gt;
  &lt;p id=&quot;OHvD&quot;&gt;Сонг отметил, что курс DeFi будет полностью удаленным из-за ограничений COVID-19, но что учебная программа будет одинаковой как для студентов Калифорнийского университета в Беркли, так и для участников класса MOOC. Тем не менее, она упомянула, что студенты Беркли будут проводить больше курсовой работы, например, завершать открытые классные проекты и получать практический опыт разработки новых технологий в пространстве DeFi. Невозаменяемые токены или NFT будут выдаваться в качестве сертификатов тем, кто завершит курс.&lt;/p&gt;
  &lt;p id=&quot;9ipF&quot;&gt;&lt;strong&gt;&lt;em&gt;Связано:  &lt;a href=&quot;https://cointelegraph.com/news/specialized-workforce-needed-as-crypto-and-blockchain-courses-enter-colleges&quot; target=&quot;_blank&quot;&gt;для поступления в колледжи курсов по криптовалюте и блокчейну требуется специальная рабочая сила.&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;ggUn&quot;&gt;Хотя курс DeFi в Калифорнийском университете в Беркли может быть одним из первых в своем роде, примечательно, что MOOC открыт для всех во всем мире. «У нас есть студенты из Европы, Индии, Азии и других регионов за пределами США», - сказал Сонг. Оставаясь верной открытым, инклюзивным стандартам DeFi, она добавила, что цель курса Berekely DeFi - объединить онлайн-участников со студентами, зарегистрированными в Беркли, чтобы создать более крупное сообщество, одновременно улучшая технологии в космосе.&lt;/p&gt;
  &lt;p id=&quot;DZ9Q&quot;&gt;Вайоминг, один из ведущих штатов по инновациям в области блокчейнов, также предлагает обучение по DeFi студентам Университета Вайоминга. Али Неджадмалаери, профессор финансов в Университете Вайоминга, сказал Cointelegraph, что университет предлагает второстепенный блокчейн и что различные дисциплины в этом секторе можно изучать в виде курсов.&lt;/p&gt;
  &lt;p id=&quot;SAv8&quot;&gt;Например, Неджадмалайери преподает курс «Блокчейн и финансовые услуги», который представляет собой онлайн-класс на целый семестр, который содержит часть по концепциям DeFi:&lt;/p&gt;
  &lt;blockquote id=&quot;Bocb&quot;&gt;«Первая часть этого курса в весеннем семестре была посвящена введению и обзору сектора блокчейнов. Второй модуль был посвящен сфере цифровых денег, которая включала ранние эксперименты с электронными деньгами и цифровыми валютами центральных банков. DeFi была последней частью, где мы обсуждали такие платформы, как Uniswap и Aave, а также различные приложения ».&lt;/blockquote&gt;
  &lt;p id=&quot;UaIH&quot;&gt;По словам Неджадмалайери, любой желающий может пройти курс по блокчейну и финансовым услугам. «Если вас приняли как нетрадиционного студента, вы можете пройти курс», - пояснил он, добавив, что в течение весеннего семестра занятия прошли около 10 студентов. Но, учитывая интерес к DeFi, он ожидает, что это число будет расти в дальнейшем, указывая на то, что люди, не имеющие опыта в области компьютерных наук или финансов, начинают находить DeFi интересным:&lt;/p&gt;
  &lt;blockquote id=&quot;Quzj&quot;&gt;«У вас есть люди, которые умеют программировать, но продукты DeFi должны быть ориентированы на определенную клиентуру. Внутренние знания об этих конкретных отраслях важны и поэтому будут в центре внимания многих из этих классов ».&lt;/blockquote&gt;
  &lt;p id=&quot;lAbR&quot;&gt;Несмотря на то, что Соединенные Штаты &lt;a href=&quot;https://blog.chainalysis.com/reports/2021-global-defi-adoption-index&quot; target=&quot;_blank&quot;&gt;занимают&lt;/a&gt; в качестве ведущего региона для принятия Defi по данным разведки крипто фирмы Chainalysis, европейские университеты и школа также предлагают Defi курсы для внедрения инноваций.&lt;/p&gt;
  &lt;p id=&quot;nEpE&quot;&gt;Например, Университет Никосии (UNIC) на Кипре &lt;a href=&quot;https://www.unic.ac.cy/blockchain/free-defi-mooc/&quot; target=&quot;_blank&quot;&gt;предлагает&lt;/a&gt; бесплатный MOOC DeFi начиная с 11 октября. Джордж Джаглис, исполнительный директор Института будущего в UNIC, сказал Cointelegraph, что, хотя UNIC предлагает бесплатный вводный курс по криптовалюте и блокчейн с 2013 года, DeFi освещается лишь кратко. Тем не менее, учитывая успех курса, который привлек более 45 000 студентов из разных стран, UNIC теперь предлагает шестинедельный онлайн-курс, полностью посвященный DeFi.&lt;/p&gt;
  &lt;p id=&quot;qKfN&quot;&gt;Джаглис поделился, что учебная программа курса будет охватывать все основы DeFi: «Это включает в себя полный стек приложений DeFi (децентрализованные биржи, автоматизированное создание рынка, кредитование и заимствование, добыча ликвидности, выращивание урожая, децентрализованное страхование, синтетические активы, оракулы, стейблкоины), управление , токеномика, DAO ». Хотя курс полностью бесплатный, Джаглис отметил, что для выпускников, которые хотят получить выданный UNIC сертификат об окончании, который можно проверить с помощью блокчейна, взимается дополнительная плата.&lt;/p&gt;
  &lt;p id=&quot;KfZy&quot;&gt;В дополнение к UNIC, Европейская техническая школа, которая была запущена в июле и предлагает две программы блокчейна, также подробно обсуждает DeFi. Виктория Гаго, со-генеральный директор Европейской технической школы, сообщила Cointelegraph, что как курс Blockchain Executive Program, так и Certified Blockchain Expert Course &lt;a href=&quot;https://europeantech.school/&quot; target=&quot;_blank&quot;&gt;содержат&lt;/a&gt; модуль DeFi, преподаваемый Моникой Сингер, руководителем ConsenSys в Южной Африке.&lt;/p&gt;
  &lt;p id=&quot;4u0j&quot;&gt;В отличие от других упомянутых курсов DeFi, Гаго считает, что эти курсы по блокчейну небольшие и целенаправленные - от студентов требуется внести плату за присоединение, а также подать заявку на зачисление. Гаго уточнил:&lt;/p&gt;
  &lt;blockquote id=&quot;MT03&quot;&gt;«Это все живые, онлайн-классы, основанные на когортах, которые начинаются 15 сентября. Классы будут состоять из 25 студентов каждый, чтобы гарантировать, что студенты могут взаимодействовать с профессорами и их коллегами».&lt;/blockquote&gt;
  &lt;p id=&quot;oHlQ&quot;&gt;По словам Гаго, то, что сегодня обычно называют децентрализованными финансами, в конечном итоге станет просто финансами в будущем, поэтому она считает, что преподавание курсов, ориентированных на DeFi, необходимо: «Мы надеемся, что студенты, проходящие эти курсы, смогут построить эффективную сеть. будучи окруженным другими людьми, которые хотят учиться и вносить свой вклад в сектор блокчейнов ».&lt;/p&gt;
  &lt;h2 id=&quot;912W&quot;&gt;Проблемы обучения DeFi&lt;/h2&gt;
  &lt;p id=&quot;QNa5&quot;&gt;Примечательно, что университеты начинают предлагать курсы DeFi, но быстро развивающийся характер криптовалютного сектора может создать проблемы для профессоров.&lt;/p&gt;
  &lt;p id=&quot;F3C7&quot;&gt;Например, разработка учебной программы, посвященной наиболее актуальным темам в DeFi, может быть проблематичной. Неджадмалайери объяснил, что в весеннем семестре 2021 года ему пришлось изменить все в своем курсе по блокчейну и финансовым услугам, поскольку DeFi начал набирать обороты: «Мне пришлось отказаться от многих своих лекций и заменить их концепциями DeFi».&lt;/p&gt;
  &lt;p id=&quot;e8PK&quot;&gt;&lt;strong&gt;&lt;em&gt;По теме:  &lt;a href=&quot;https://cointelegraph.com/news/the-perfect-storm-defi-hacks-will-advance-the-crypto-sector-moving-forward&quot; target=&quot;_blank&quot;&gt;Идеальный шторм: взломы DeFi продвинут криптосектор вперед&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;xo2m&quot;&gt;Повторяя эту озабоченность, Джаглис отметил, что разработка учебной программы может быть сложной задачей, когда почти не на что полагаться и когда сектор буквально меняется день ото дня: «Достаточно сказать, что мы не считаем материал окончательным на любом этапе: мы вносят и будут продолжать вносить изменения, чтобы отразить новые события до (и после) даты каждой сессии ».&lt;/p&gt;
  &lt;p id=&quot;HNSx&quot;&gt;Тем не менее, участники отрасли считают, что курсы DeFi никуда не денутся и станут неотъемлемой частью дальнейшего образования. Например, Алекс Тапскотт, автор и преподаватель серии курсов Coursera по специализации Blockchain Revolution Specialization, сказал Cointelegraph, что по мере роста индустрии DeFi спрос на образовательный контент также будет расти:&lt;/p&gt;
  &lt;blockquote id=&quot;w4gZ&quot;&gt;«На заре Биткойн школы, такие как Корнелл и Беркли, начали предлагать курсы по этой теме. Я не удивлюсь, если DeFi станет частью учебной программы каждой программы MBA в будущем. Мы еще очень рано ».&lt;/blockquote&gt;
  &lt;p id=&quot;0TwJ&quot;&gt;В дополнение к этому Кимберли Грауэр, директор по исследованиям в Chainalysis, сказала Cointelegraph, что курсы DeFi будут постоянной тенденцией во многих университетах, наряду с возможным включением других курсов, связанных с криптографией: «В этом смысле DeFi действует как фундаментальный строительный блок. для более широкого круга занятий ».&lt;/p&gt;

</content></entry><entry><id>makartis:otkQFjQbV61</id><link rel="alternate" type="text/html" href="https://teletype.in/@makartis/otkQFjQbV61?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=makartis"></link><title>Abstract Datagram Network Layer (ADNL)</title><published>2021-08-22T23:12:26.838Z</published><updated>2021-08-22T23:16:56.936Z</updated><category term="ton" label="TON"></category><summary type="html">Abstract Datagram Network Layer (ADNL)</summary><content type="html">
  &lt;p&gt;&lt;strong&gt;Abstract Datagram Network Layer (ADNL)&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Краеугольным камнем в создании сетевых протоколов TON является ADNL. Он позволяет всем узлам принимать определенные «сетевые идентификаторы», представленные 256-битными «абстрактными сетевыми адресами», и обмениваться данными (отправлять датаграмы друг другу, в качестве первого шага), используя только эти 256-битные сетевые адреса для идентификации отправителя и получатель. В частности, не нужно беспокоиться об адресах IPv4 или IPv6, номерах портов UDP и т.д., они скрыты абстрактным сетевым уровнем.&lt;/p&gt;
  &lt;p&gt;&lt;u&gt;3.1.1. Абстрактные сетевые адреса&lt;/u&gt;&lt;/p&gt;
  &lt;p&gt;Абстрактный сетевой адрес, или просто адрес для краткости, является 256-битным целым числом равным 256-битному публичному ключу ECC. Этот публичный ключ может быть сгенерирован произвольно, таким образом создавая столько сетевых идентификаторов, сколько нравится узлу. Однако для получения (и расшифровки) сообщений, предназначенных для такого адреса, необходимо знать соответствующий закрытый ключ. Фактически, адрес не является открытым ключом; вместо этого это 256-битный хэш (Hash = sha256) сериализованного TL-объекта, который может описывать несколько типов открытых ключей и адресов в зависимости от его конструктора (первые четыре байта). В простейшем случае этот сериализованный TL-объект состоит из 4-байтового магического числа и 256-битного открытого ключа криптографии с эллиптической кривой (ECC); в этом случае адрес будет равен хешу этой 36-байтовой структуры. Однако можно вместо этого использовать 2048-битные ключи RSA или любую другую схему криптографии с открытыми ключами. Когда узел узнает абстрактный адрес другого узла, он также должен получить свой «образ» (т.е. сериализованный TL-объект, хэш которого равен этому абстрактному адресу), иначе он не сможет шифровать и отправлять датаграммы на этот адрес.&lt;/p&gt;
  &lt;p&gt;&lt;u&gt;3.1.2. Сети более низкого уровня&lt;/u&gt;&lt;/p&gt;
  &lt;p&gt;Реализация UDP. С точки зрения почти всех сетевых компонентов TON, единственное, что существует, - это сеть (сетевой уровень абстрактных датаграмм), способная отправлять датаграмы с одного абстрактного адреса на другой. В принципе, абстрактный сетевой уровень датаграм (ADNL) может быть реализован в различных существующих сетевых технологиях. Однако мы собираемся реализовать его по протоколу UDP в сетях IPv4 / IPv6 (таких как Интернет или интрасети), с необязательным запасным вариантом TCP, если UDP недоступен.&lt;/p&gt;
  &lt;p&gt;&lt;u&gt;3.1.3. Простой вариант использования ADNL по UDP&lt;/u&gt;&lt;/p&gt;
  &lt;p&gt;Простейший случай отправки датаграм с абстрактного адреса отправителя на любой другой абстрактный адрес (с известным изображением) может быть реализован следующим образом. Предположим, что отправитель каким-то образом знает IP-адрес и UDP-порт получателя, которому принадлежит абстрактный адрес назначения, и что и получатель, и отправитель используют абстрактные адреса, полученные из 256-битных открытых ключей ECC. В этом случае отправитель просто добавляет датаграм для отправки своей подписью ECC (выполненной с помощью своего закрытого ключа) и адресом своего источника. Результат шифруется открытым ключом получателя, встраивается в датаграму UDP и отправляется на известный IP-адрес и порт получателя. Поскольку первые 256 бит датаграмы UDP содержат абстрактный адрес получателя, получатель может определить, какой закрытый ключ следует использовать для расшифровки оставшейся части датаграмы. Только после этого раскрывается личность отправителя.&lt;/p&gt;
  &lt;p&gt;&lt;u&gt;3.1.4. Менее безопасный способ, с адресом отправителя в тексте&lt;/u&gt;&lt;/p&gt;
  &lt;p&gt;Иногда недостаточно безопасной схемы, когда адреса получателя и отправителя хранятся в незашифрованном виде в дейтаграмме UDP; закрытый ключ отправителя и открытый ключ получателя объединяются вместе с помощью ECDH (эллиптическая кривая Диффи-Хеллмана) для генерации 256-битного общего секрета, который используется впоследствии, наряду со случайным 256-битным одноразовым номером, также включенным в незашифрованную часть, получить ключи AES, используемые для шифрования. Целостность может быть обеспечена, например, путем объединения хеша исходных данных открытого текста в открытый текст перед шифрованием. Преимущество этого подхода состоит в том, что если ожидается обмен более чем двумя датаграмами между двумя адресами, общий секрет может быть вычислен только один раз, а затем кэширован, тогда более медленные операции эллиптической кривой больше не будут требоваться для шифрования или дешифрования следующих датаграм.&lt;/p&gt;
  &lt;p&gt;&lt;u&gt;3.1.5. Каналы и идентификаторы каналов&lt;/u&gt;&lt;/p&gt;
  &lt;p&gt;В простейшем случае первые 256 бит датаграммы UDP, несущей встроенную дейтаграмму TON ADNL, будут равны адресу получателя. Однако в целом они составляют идентификатор канала. Существуют разные типы каналов. Некоторые из них являются двухточечными; они создаются двумя сторонами, которые желают обмениваться большим количеством данных в будущем и генерировать общий секрет путем обмена несколькими пакетами, зашифрованными, путем запуска классической или эллиптической кривой Диффи-Хеллмана (если безопасность), или просто одна сторона генерирует случайный общий секрет и отправляет его другой стороне. После этого идентификатор канала извлекается из общего секрета в сочетании с некоторыми дополнительными данными (такими как адреса отправителя и получателя), например, путем хеширования, и этот идентификатор используется в качестве первых 256 битов датаграм UDP, переносящих данные, зашифрованные с помощью помощь этого общего секрета.&lt;/p&gt;
  &lt;p&gt;&lt;u&gt;3.1.6. Канал как идентификатор туннеля&lt;/u&gt;&lt;/p&gt;
  &lt;p&gt;В общем, «канал» или «идентификатор канала» просто выбирает способ обработки входящей датаграммы UDP, известный получателю. Если канал является абстрактным адресом получателя, обработка выполняется, если канал является установленным двухточечным каналом, обработка состоит в расшифровке датаграммы с помощью общего секрета. В частности, идентификатор канала может фактически выбрать «туннель», когда непосредственный получатель просто пересылает полученное сообщение кому-то другому - фактическому получателю или другому прокси. Некоторые этапы шифрования или дешифрования (напоминающие «луковую маршрутизацию» или даже «чесночную маршрутизацию») могут быть выполнены по пути, и другой идентификатор канала может быть использован для перешифрованных переадресованных пакетов (например, одноранговая маршрутизация). Равноправный канал может использоваться для пересылки пакета следующему получателю на пути). Таким образом, некоторая поддержка «туннелирования» и «прокси» - что-то вроде того, что обеспечивается проектами TOR или I2P - может быть добавлена на уровне сетевого уровня абстрактных дейтаграмм TON, не затрагивая функциональность всех высших сетевые протоколы уровня TON, которые были бы независимы от такого дополнения. Эта возможность используется службой TON Proxy.&lt;/p&gt;
  &lt;p&gt;&lt;u&gt;3.1.7. Нулевой канал и проблема начальной загрузки&lt;/u&gt;&lt;/p&gt;
  &lt;p&gt;Обычно TON ADNL будет иметь некоторую «таблицу соседей», содержащую информацию о других известных узлах, таких как их абстрактные адреса и их прообразы (то есть открытые ключи), а также их IP-адреса и порты UDP. Затем он будет постепенно расширять эту таблицу, используя информацию, полученную из этих известных узлов, в качестве ответов на специальные запросы, а иногда и удалять устаревшие записи. Однако, когда узел TON ADNL только запускается, может случиться так, что он не знает ни одного другого узла и может узнать только IP-адрес и UDP-порт узла, но не его абстрактный адрес. Это происходит, например, если легкий клиент не может получить доступ ни к одному из ранее кэшированных узлов и к любым узлам, жестко закодированным в программное обеспечение, и должен попросить пользователя ввести IP-адрес или DNS-домен узла, который необходимо разрешить через DNS. В этом случае узел будет отправлять пакеты на специальный «нулевой канал» рассматриваемого узла. Это не требует знания открытого ключа получателя (но сообщение все равно должно содержать личность и подпись отправителя), поэтому сообщение передается без шифрования. Обычно его следует использовать только для получения идентификатора (возможно, единовременного идентификатора, созданного специально для этой цели) получателя и затем для начала более безопасной связи. Как только хотя бы один узел известен, можно легко заполнить «таблицу соседей» и «таблицу маршрутизации» большим количеством записей, изучая их на основе ответов на специальные запросы, отправленные на уже известные узлы. Не все узлы требуются для обработки дейтаграмм, отправленных на нулевой канал, но те, которые используются для начальной загрузки легких клиентов, должны поддерживать эту функцию.&lt;/p&gt;
  &lt;p&gt;&lt;u&gt;3.1.8. TCP-подобный стриминговый протокол поверх ADNL&lt;/u&gt;&lt;/p&gt;
  &lt;p&gt;ADNL, являющийся малым протоколом датаграмм на основе 256-битных абстрактных адресов может использоваться в качестве основы для более сложных сетевых протоколов. Можно создать, например, TCP-подобный потоковый протокол, используя ADNL в качестве абстрактной замены IP. Однако большинству компонентов проекта TON такой потоковый протокол не нужен.&lt;/p&gt;
  &lt;p&gt;&lt;u&gt;3.1.9. RLDP или надежный протокол больших датаграмм поверх ADNL&lt;/u&gt;&lt;/p&gt;
  &lt;p&gt;Надежный протокол датаграмм произвольного размера, построенный на ADNL, называемый RLDP, используется вместо протокола, подобного TCP. Этот надежный протокол датаграмм может использоваться, например, для отправки запросов RPC удаленным хостам и получения от них ответов.&lt;/p&gt;

</content></entry><entry><id>makartis:Gjy3vFDS0d6</id><link rel="alternate" type="text/html" href="https://teletype.in/@makartis/Gjy3vFDS0d6?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=makartis"></link><title>TON: Telegram Open Networ.</title><published>2021-08-22T23:06:56.753Z</published><updated>2021-08-23T01:10:59.817Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/e9/3c/e93c3369-b719-4cab-a086-e34d6bfcc1f6.jpeg"></media:thumbnail><category term="ton" label="TON"></category><summary type="html">&lt;img src=&quot;https://habrastorage.org/r/w1560/webt/s4/yw/wk/s4ywwkhy0xcfd2b4cchw6hqcd-4.jpeg&quot;&gt;Уже две недели Рунет шумит про Telegram и ситуацию с его бессмысленной и беспощадной блокировкой Роскомнадзором. Рикошетом задело многих, но всё это — темы для постов на Geektimes. Меня же удивило другое — я до сих пор не видел на Хабре ни одного разбора запланированной к выходу на базе Telegram сети TON — Telegram Open Network. Мне захотелось восполнить этот недостаток, ибо поизучать там есть что — даже несмотря на отсутствие официальных заявлений о нём.</summary><content type="html">
  &lt;h1&gt;TON: Telegram Open Network. Часть 1: Вступление, сетевой уровень, ADNL, DHT, оверлейные сети&lt;/h1&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/r/w1560/webt/s4/yw/wk/s4ywwkhy0xcfd2b4cchw6hqcd-4.jpeg&quot; width=&quot;1280&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Уже две недели Рунет шумит про Telegram и ситуацию с его бессмысленной и беспощадной блокировкой Роскомнадзором. Рикошетом задело многих, но всё это — темы для постов на Geektimes. Меня же удивило другое — я до сих пор не видел на Хабре ни одного разбора запланированной к выходу на базе Telegram сети TON — Telegram Open Network. Мне захотелось восполнить этот недостаток, ибо поизучать там есть что — даже несмотря на отсутствие официальных заявлений о нём.&lt;/p&gt;
  &lt;p&gt;Напомню — ходят слухи о том, что Telegram запустил очень масштабное закрытое ICO, уже собрав в нём невероятные суммы. Предполагается, что уже в этом году будет запущена собственная криптовалюта Gram — и у каждого пользователя Телеграма автоматически появится кошелёк, что само по себе создает немалое преимущество перед остальными криптовалютами.&lt;/p&gt;
  &lt;p&gt;К сожалению, так как официальных заявлений нет, дальше я могу отталкиваться только от &lt;a href=&quot;https://denull.ru/telegram/ton-tech.pdf&quot; target=&quot;_blank&quot;&gt;документа неизвестного происхождения&lt;/a&gt;, о чём я сразу вас предупреждаю. Конечно, он может оказаться очень искусной подделкой, но не исключено и то, что это — реальный whitepaper будущей системы, написанный Николаем Дуровым (и слитый, вероятно, кем-то из инвесторов). Но даже если это фейк, никто нам не запретит его поизучать и обсудить, верно?&lt;/p&gt;
  &lt;p&gt;Что же говорится в этом документе? Я попробую пересказать его своими словами, близко к тексту, но по-русски и чуть более человечно (да простит меня Николай со своей склонностью уходить в формальную математику). Имейте в виду, что даже в случае его подлинности, это черновое описание системы и оно, весьма вероятно, изменится к моменту публичного запуска.&lt;/p&gt;
  &lt;p&gt;Мы узнаём, что кроме криптовалюты предполагается ещё очень и очень много всего. Давайте разберём по порядку.&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;TON Blockchain&lt;/strong&gt;. Это основа всей системы. Если вы совсем не знаете, что такое &lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%91%D0%BB%D0%BE%D0%BA%D1%87%D0%B5%D0%B9%D0%BD&quot; target=&quot;_blank&quot;&gt;блокчейн&lt;/a&gt; — рекомендую узнать, потому что тут блокчейнов будет много. Вложенные друг в друга, виртуально раздроблённые и даже «вертикальные» блокчейны внутри блоков других блокчейнов. А ещё тут будет несколько круто звучащих терминов типа &lt;em&gt;Instant Hypercube Routing&lt;/em&gt; и &lt;em&gt;Infinite Sharding Paradigm&lt;/em&gt;, но об этом позже. И, конечно, proof-of-stake и смарт-контракты.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;TON P2P Network&lt;/strong&gt;. Пиринговая сеть, на основе которой будет построена работа системы. О ней в первую очередь пойдёт речь в этой части повествования.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;TON Storage&lt;/strong&gt;. Файловое хранилище, которое независимо от блокчейна будет построено на вышеупомянутой пиринговой сети. Можно сравнить с торрентами.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;TON Proxy&lt;/strong&gt;. Это сервис, цель которого — повысить анонимность участников сети. Любой пакет можно отправить не напрямую, а через туннели-посредники с дополнительным шифрованием — подобно I2P или TOR.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;TON DHT&lt;/strong&gt;. Распределенная хэш-таблица для хранения произвольных значений. Она тоже построена поверх &lt;em&gt;TON Network&lt;/em&gt; (но при этом используется им же) и помогает &lt;strong&gt;TON Storage&lt;/strong&gt; находить «раздающие» узлы, а &lt;strong&gt;TON Proxy&lt;/strong&gt; — промежуточные ретрансляторы. Но нужно отметить, что, в отличие от блокчейна, эта хэш-таблица не является защищённым хранилищем — хранить важную информацию в ней нельзя.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;TON Services&lt;/strong&gt;. Платформа для произвольных сервисов. По сути — это новый интернет поверх всего вышеописанного. Обмен данными — через &lt;strong&gt;TON Network&lt;/strong&gt;/&lt;strong&gt;TON Proxy&lt;/strong&gt;, а логика — в смарт-контрактах самого &lt;strong&gt;TON Blockchain&lt;/strong&gt;. И интерфейс с довольно привычными URL.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;TON DNS&lt;/strong&gt;. Раз уж зашла речь про привычные URL, нужен и преобразователь из них в 256-битные адреса — аккаунтов, контрактов, сервисов и узлов.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;TON Payments&lt;/strong&gt;. И вот только тут затрагивается денежный вопрос. И это будет не только &lt;strong&gt;gram&lt;/strong&gt; — как с эфиром, будут возможны любые «токены»; грамы тут будут всего лишь валютой «по умолчанию».&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Это первая часть, описывающая «приземлённый» уровень TON — его сетевую часть, строящуюся поверх традиционных протоколов. В следующей части речь пойдёт про «мякотку» — блокчейн, который будет поддерживаться описанной далее системой. Таким образом, мой порядок пересказа несколько отличается от использованного в вышеупомянутом документе (который начинается сразу с абстрактного уровня).&lt;/p&gt;
  &lt;h3&gt;Базовые понятия&lt;/h3&gt;
  &lt;p&gt;&lt;strong&gt;TL&lt;/strong&gt; (Type Language). Это абстрактный бинарный формат для произвольных структур данных. Он используется в протоколе Телеграма и будет активно использоваться в TON. Если хотите подробно ознакомиться с ним — &lt;a href=&quot;https://core.telegram.org/mtproto/TL&quot; target=&quot;_blank&quot;&gt;вот его описание&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Хэш&lt;/strong&gt; (&lt;em&gt;hash&lt;/em&gt;). Функция, производящая необратимое преобразование произвольной структуры данных в единственное число фиксированной длины. В рамках документации повсеместно идёт речь о функции &lt;a href=&quot;https://ru.wikipedia.org/wiki/SHA-2&quot; target=&quot;_blank&quot;&gt;SHA-256&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Узел сети&lt;/strong&gt; (&lt;em&gt;node&lt;/em&gt;). Узел — это ПО, которое будет обеспечивать работу системы. В частности, предполагается, что каждое клиентское приложение Телеграма будет включать в себя узел TON&amp;#x27;а. На низком уровне узлы имеют IPv4/IPv6-адреса и общаются по протоколу UDP, на более высоком — обладают &lt;em&gt;абстрактными адресами&lt;/em&gt; и реализуют протокол ADNL (об абстрактных адресах и ADNL — см. ниже). Когда речь идёт о том, что какие-то части системы что-то делают или хранят какие-то данные — подразумевается, что это делают узлы сети.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Абстрактный адрес&lt;/strong&gt; (или просто &lt;em&gt;адрес&lt;/em&gt;, &lt;em&gt;address&lt;/em&gt;). Адрес узла определяется его публичным ключом. Более строго — это 256-битный хэш (SHA256) от структуры данных, содержащей публичный ключ (конкретный криптографический алгоритм при этом не уточняется — в качестве примера приводятся эллиптические кривые и RSA-2048). Чтобы один узел мог взаимодействовать с другим, ему нужно знать не только адрес того, но и эту структуру данных. Теоретически один физический узел может создать любое количество адресов (соответствующих разных ключам).&lt;/p&gt;
  &lt;p&gt;Далее часто используется именно такая связка: «прообраз» в виде TL-структуры (содержащей практически любые данные), и 256-битный хэш от неё, используемый для адресации.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Блокчейн&lt;/strong&gt; (&lt;em&gt;blockchain&lt;/em&gt;). Блокчейн — это структура данных, элементы (&lt;em&gt;блоки&lt;/em&gt;) которой упорядочены в «цепь», и каждый следующий блок цепи содержит в себе хэш предыдущего. Таким образом достигается целостность — изменения могут вноситься только добавлением новых блоков.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Сервис&lt;/strong&gt; (&lt;em&gt;service&lt;/em&gt;). Сервисы в рамках TON могут быть различных типов — в зависимости от того, используют они блокчейн или нет. Например, один (или множество) из узлов сети может обрабатывать некие RPC-запросы по описанному далее протоколу ADNL, не создавая никаких записей в блокчейне — наподобие традиционных веб-серверов. В том числе рассматривается возможность реализации HTTP поверх ADNL, а также переход самого мессенджера на этот протокол. По аналогии с TOR или I2P, это сделает его более устойчивым к различным блокировкам.&lt;/p&gt;
  &lt;p&gt;В то же время, ряд сервисов подразумевает и взаимодействие с блокчейном, и обработку запросов вне его. Например, для TON Storage — файлового хранилища — не очень разумно хранить сами файлы в блокчейне. В нём будут содержаться только хэши файлов (вместе с какой-то метаинформацией о них), а в качестве «файловых серверов» будут выступать специализированные узлы сети, готовые отдавать их другим узлам по ADNL.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Туманный сервис&lt;/strong&gt; (&lt;em&gt;fog service&lt;/em&gt;). Речь идёт о некоторых сервисах, которые подразумевают децентрализацию и открытое участие в них. Например, TON Proxy — это сервис, который может поддерживать любой участник, желающий предоставить свой узел в качестве посредника (прокси), пересылающего пакеты между другими узлами. При желании он может взымать за это установленную им плату — используя систему TON Payments для микроплатежей (которая, в свою очередь, тоже является туманным сервисом).&lt;/p&gt;
  &lt;h3&gt;ADNL: Abstract Datagram Network Layer&lt;/h3&gt;
  &lt;p&gt;На самом низком уровне взаимодействие между узлами будет производиться по протоколу UDP (хотя допустимы и другие варианты).&lt;/p&gt;
  &lt;p&gt;Как упомянуто выше, чтобы один узел мог послать пакет другому, он должен знать один из его публичных ключей (и, следовательно, адрес, который им определяется). Он зашифровывает пакет этим ключом и добавляет в начало пакета 256-битный адрес получателя — поскольку один узел может иметь несколько таких адресов, это позволит ему определить, какой ключ использовать для расшифровки.&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/r/w1560/webt/9d/6c/gl/9d6cgleuwlpssowltklr3zr7ogw.png&quot; width=&quot;1560&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Кроме того, вместо адреса получателя в начале пакета данных может находиться т.н. идентификатор &lt;em&gt;канала&lt;/em&gt;. В таком случае обработка пакета уже зависит от конкретных договорённостей между узлами — например, отправленные в некий канал данные могут предназначаться другому узлу и должны быть ему переадресованы (это и есть сервис &lt;em&gt;TON Proxy&lt;/em&gt;). Другим частным случаем может быть взаимодействие напрямую между узлами, но с шифрованием по индивидуальной паре ключей для этого канала (предварительно сформированных по протоколу Диффи-Хеллмана).&lt;/p&gt;
  &lt;p&gt;Наконец, специальным случаем является «нулевой» канал — если узел ещё не знает публичных ключей своих «соседей», он может посылать им пакеты без шифрования совсем. Это предназначено только для инициализации — как только узлы пришлют информацию о своих ключах, их стоит использовать для дальнейшего взаимодействия.&lt;/p&gt;
  &lt;p&gt;Вышеописанный протокол (256 бит идентификатора канала + содержимое пакета) называется ADNL. Документация упоминает возможность реализации аналога TCP поверх него или собственной надстройки — RLDP (Reliable Large Datagram Protocol), но не вдается в подробности об их реализации.&lt;/p&gt;
  &lt;h3&gt;TON DHT: Распределённая хэш-таблица&lt;/h3&gt;
  &lt;p&gt;Как в случае с другими распределёнными системами, TON предполагает реализацию DHT — &lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D1%91%D0%BD%D0%BD%D0%B0%D1%8F_%D1%85%D0%B5%D1%88-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0&quot; target=&quot;_blank&quot;&gt;распределённой хэш-таблицы&lt;/a&gt;. Более конкретно — таблица является &lt;a href=&quot;https://ru.wikipedia.org/wiki/Kademlia&quot; target=&quot;_blank&quot;&gt;Kademlia-подобной&lt;/a&gt;. Если вы не знакомы с такой разновидностью хэш-таблиц — не беспокойтесь, далее я примерно опишу, как они устроены.&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/r/w1560/webt/r8/cu/r5/r8cur5xk2muhcw_cposc-6mpp-0.png&quot; width=&quot;1560&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;В абстрактном смысле, DHT ставит в соответствие 256-битным ключам некие бинарные значения произвольной длины. При этом ключи в таблице — это хэши от определённой TL-структуры (сами структуры тоже хранятся вместе с DHT). Это очень похоже на формирование адресов узлов — и они действительно могут присутствовать в DHT (например, по такому ключу может находиться IP-адрес узла соответствующего заданному &lt;em&gt;абстрактному адресу&lt;/em&gt;, если он не скрывает его). Но в общем случае, «прообразы ключей» (их &lt;em&gt;описания&lt;/em&gt;, &lt;em&gt;key descriptions&lt;/em&gt;) — это метаданные, которые указывают на «владельца» записи в хэш-таблице (то есть публичный ключ какого-то узла), тип хранимого значения и правила, по которым эта запись может впоследствии изменяться. Например, правило может разрешать изменять значение только владельцу — или запрещать изменение значения в меньшую сторону (чтобы защититься от replay-атак).&lt;/p&gt;
  &lt;p&gt;Кроме 256-битных ключей вводится понятие DHT-адресов. Разница с обычными адресами узлов в том, что DHT-адрес обязательно привязан к IP-адресу. Если узел не скрывает своего IP, он может использовать обычный адрес для DHT. Но чаще для нужд DHT будет заводиться отдельный, «полу-постоянный» адрес.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/r/w1560/webt/nq/bo/on/nqboonfhykew6tiospv1wlosye4.png&quot; width=&quot;300&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Над ключами и DHT-адресами вводится понятие расстояния — в этом всё совпадает с таблицами &lt;a href=&quot;https://ru.wikipedia.org/wiki/Kademlia&quot; target=&quot;_blank&quot;&gt;Kademlia&lt;/a&gt; — расстояние между ключами равно XOR (побитовому исключающему ИЛИ) от них. Как и в таблицах Kademlia, значение, соответствующее некоему ключу, должно храниться на &lt;em&gt;s&lt;/em&gt; узлах, имеющих наименьшее расстояние до этого ключа (&lt;em&gt;s&lt;/em&gt; тут — относительно небольшое число).&lt;/p&gt;
  &lt;p&gt;Для того, чтобы узел DHT мог взаимодействовать с другими такими узлами, он держит в памяти &lt;em&gt;таблицу маршрутизации DHT&lt;/em&gt; — DHT- и IP-адреса узлов, с которыми он взаимодействовал до этого, сгруппированные по расстоянию до них. Таких групп 256 (они соответствуют старшему выставленному биту в значении расстояния — то есть узлы на расстоянии от 0 до 255 попадут в одну группу, от 256 до 65535 — в следующую, и т.д.). Внутри каждой группы хранится ограниченное число «лучших» узлов (в плане пинга до них).&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/r/w1560/webt/pa/j1/_p/paj1_pro7dbto2vzkdou6hf6hoq.png&quot; width=&quot;1560&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Каждый узел должен поддерживать несколько операций: &lt;em&gt;сохранение значения для ключа&lt;/em&gt;, &lt;em&gt;поиск узлов&lt;/em&gt; и &lt;em&gt;поиск значений&lt;/em&gt;. Поиск узлов подразумевает выдачу по заданному ключу ближайших к нему узлов из таблицы маршрутизации; поиск значений — то же самое, за исключением ситуации, когда узлу известно значение для ключа (тогда он просто возвращает его). Соответственно, если узел хочет найти в DHT значение по ключу, он посылает запросы небольшому числу ближайших к этому ключу узлов из своей таблицы маршрутизации. Если среди их ответов нет искомого значения, но есть другие адреса узлов, то запрос повторяется уже к ним.&lt;/p&gt;
  &lt;p&gt;TON DHT может использоваться для различных целей, например — для реализации торрент-подобного хранилища файлов (см. &lt;em&gt;TON Storage&lt;/em&gt;); для определения адресов узлов, реализующих определённые сервисы; для хранения информации о владельцах аккаунтов в блокчейне. Но самое важное применение — обнаружение узлов по их абстрактным адресам. Для этого адрес используется в качестве ключа, значение которого нужно найти. В результате запроса либо найдётся сам узел (если искомый адрес был его полу-постоянным DHT-адресом), либо значением окажется IP-адрес и порт для подключения — или же другой адрес, который следует использовать в качестве тоннеля-посредника.&lt;/p&gt;
  &lt;h3&gt;Оверлейные сети в TON&lt;/h3&gt;
  &lt;p&gt;Описанный выше протокол ADNL подразумевает возможность любым узлам обмениваться информацией друг с другом — правда, не обязательно оптимальными путями. Можно сказать, что благодаря ADNL все узлы образуют глобальный граф TON (в идеале — связный). Но дополнительно предусмотрена возможность создавать оверлейные сети — подграфы внутри этого графа.&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/r/w1560/webt/4o/kp/wr/4okpwrdql1meiy-rvzinyratyiw.png&quot; width=&quot;1284&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Внутри такой сети взаимодействие производится только напрямую — по предварительно сформированным связям между узлами-участниками сети (по каналам ADNL, описанными выше). Формирование таких связей между соседями, поиск самих соседей — автоматических процесс, стремящийся сохранить связность оверлейной сети и минимизировать задержки при обмене данными в ней.&lt;/p&gt;
  &lt;p&gt;Кроме того, предусмотрен способ быстро распространять крупные широковещательные обновления внутри сети — они разбиваются на части, дополняются кодом коррекции ошибок, и все эти куски пересылаются от одного участника другому. Таким образом участнику не обязательно полностью получить все части, прежде чем пересылать их дальше по сети.&lt;/p&gt;
  &lt;p&gt;Оверлейные сети могут быть публичными и приватными. Стать участником публичной сети несложно — нужно найти TL-структуру, описывающую её (она может быть публичной — или доступна по определённому ключу в DHT). В случае с приватной сетью эта структура должна быть известна узлу заранее.&lt;/p&gt;
  &lt;h3&gt;Продолжение следует&lt;/h3&gt;

</content></entry><entry><id>makartis:Ljewl8Pdo</id><link rel="alternate" type="text/html" href="https://teletype.in/@makartis/Ljewl8Pdo?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=makartis"></link><title>DeBot Specifications</title><published>2021-03-03T06:43:38.494Z</published><updated>2021-03-03T06:43:38.494Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/fe/72/fe722d48-a68d-418a-ab11-352f1133c970.svg"></media:thumbnail><summary type="html">&lt;img src=&quot;https://docs.ton.dev/uploads/KPwlh26fN52e0TF6YcpZSQ.svg&quot;&gt;Provide a secure and convenient environment to work with smart-contracts</summary><content type="html">
  &lt;h2&gt;Objective&lt;/h2&gt;
  &lt;p&gt;Provide a &lt;strong&gt;secure&lt;/strong&gt; and &lt;strong&gt;convenient&lt;/strong&gt; environment to work with smart-contracts&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;emulate calling smart-contract functions locally on the client&lt;/li&gt;
    &lt;li&gt;debug blockchain transactions&lt;/li&gt;
    &lt;li&gt;interact with smart-contracts deployed in the blockchain&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2&gt;Basic terms&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;DeBot&lt;/strong&gt; — a smart contract facilitating conversation-like flow communication with a target smart contract.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Target smart contrac&lt;/strong&gt;t - a smart contract for which DeBot is created. DeBot is an interface to this smart contract.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;DeBot browser&lt;/strong&gt; - a program that executes DeBot and parses its answer using DeBot protocol.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;DeBot protocol&lt;/strong&gt; — a set of rules describing the communication between browser and DeBot: how to call DeBot functions and how to interpret its answers.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2&gt;Architecture&lt;/h2&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://docs.ton.dev/uploads/KPwlh26fN52e0TF6YcpZSQ.svg&quot; width=&quot;631&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;DeBot platform consists of the following elements:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;DeBot smart contract;&lt;/li&gt;
    &lt;li&gt;DeBot browser;&lt;/li&gt;
    &lt;li&gt;Target smart contract(s)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;One target smart contract can have several DeBots and vise versa. DeBot is deployed to the blockchain. DeBot browser runs on client. It downloads DeBot code and runs it inside the engine.&lt;/p&gt;
  &lt;h2&gt;Proof of State&lt;/h2&gt;
  &lt;p&gt;Transactions can be verified by running DeBot locally and comparing the result of execution to the account state in the blockchain.&lt;/p&gt;
  &lt;h2&gt;DeBot Interfaces&lt;/h2&gt;
  &lt;h3&gt;Motivation&lt;/h3&gt;
  &lt;p&gt;DeBot is a smart contract and smart contracts are isolated from each other and from the blockchain, their capabilities are limited by the commands of the virtual machine on which they are executed. But DeBots must have more possibilities. DeBots need to:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;receive input from users;&lt;/li&gt;
    &lt;li&gt;query info about other smart contracts;&lt;/li&gt;
    &lt;li&gt;query transactions and messages;&lt;/li&gt;
    &lt;li&gt;receive data from external subsystems (like file system) and external devices (like NFC, camera and so on);&lt;/li&gt;
    &lt;li&gt;call external function libraries that allow to do operations that are not supported by VM. For example, work with json, convert numbers to string and vice versa, encrypt/decrypt/sign data.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;To cover all these needs we should design different &lt;strong&gt;DeBot Interfaces&lt;/strong&gt; (DInterfaces) which can be used in DeBots and which must be supported in DeBots Browsers. These interfaces should match the requirements:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;comprehensive - interfaces should describe all types of communication accessible on modern devices;&lt;/li&gt;
    &lt;li&gt;universal - interfaces should be abstract from certain OS and hardware;&lt;/li&gt;
    &lt;li&gt;atomic - every communication channel should be separately described in the interface for further flexible resource access management&lt;/li&gt;
    &lt;li&gt;convenient - even low-skilled developers should be able to use this interface in their DeBots&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;In this model DeBot Engine should act like a proxy between DeBot Browser and DeBot. But it can have builtin implementation of very basic DInterfaces (e.g. working with json).&lt;/p&gt;
  &lt;p&gt;Also, we need to describe the manifest for DeBots. DeBot developer will describe all needed interfaces in this manifest and the DeBot Browser will check it before running DeBot. We need this manifest to keep users secure and private when using DeBots.&lt;/p&gt;
  &lt;h3&gt;Description&lt;/h3&gt;
  &lt;p&gt;Every DeBot must declare which DInterfaces it will use. For this purpose it must have &lt;code&gt;getRequiredInterfaces()&lt;/code&gt; function which returns array of required interfaces.&lt;/p&gt;
  &lt;p&gt;Every interface must have an &lt;code&gt;id&lt;/code&gt; which is an unsigned 256-bit integer and an &lt;code&gt;address&lt;/code&gt; which is used in DeBots as a destination address of internal messages. Address must be a standard TON address consisting of &lt;code&gt;DEBOT_WC&lt;/code&gt; (equal to &lt;code&gt;0xDB&lt;/code&gt;) as a &lt;em&gt;workchain_id&lt;/em&gt; part and interface &lt;code&gt;id&lt;/code&gt; as &lt;em&gt;address&lt;/em&gt; part (see &amp;quot;&lt;em&gt;Telegram Open Network Blockchain&lt;/em&gt;&amp;quot; specification, section 3.1.2 for details about TL-B scheme for address).&lt;/p&gt;
  &lt;p&gt;For example, in solidity &lt;code&gt;getRequiredInterfaces&lt;/code&gt; can be implemented like this:&lt;/p&gt;
  &lt;pre&gt;// Base contract for all debots
abstract contract Debot {

	i32 constant DEBOT_WC = -31;

	function getRequiredInterfaces() virtual returns (uint256[] interfaces); 

}

contract DebotA is Debot {

	function getRequiredInterfaces() override returns (uint256[] interfaces) {
    return [ID_TERMINAL, ID_MENU, ...];
	}

}
&lt;/pre&gt;
  &lt;h4&gt;How to use DInterface in DeBot&lt;/h4&gt;
  &lt;p&gt;To use an interface DeBot should import source file with DInterface declaration and call its methods as any other smart contract methods in TON - by sending internal messages to interface address.&lt;/p&gt;
  &lt;p&gt;Before running the DeBot, DeBot Browser should provide callbacks for DEngine to receive all requests to DInterfaces. Requests are packed into internal messages. When Browser receives a message from DEngine it should unpack the message, decode its body, call DInterface function, pack results to internal message and return it to DEngine using &lt;code&gt;Dengine.send(msg)&lt;/code&gt;.&lt;/p&gt;
  &lt;pre&gt;interface BrowserCallbacks {
  // Message from Debot to Browser with encoded DInterface call
	send(message: string) -&amp;gt; Promise&amp;lt;void&amp;gt;
	// Request from Dengine to approve some action (for example, send mesage to blockchain)
	approve(action: {}) -&amp;gt; bool
	// Request from Debot to call another debot
	invoke(debotAddress: string, message: string) -&amp;gt; Promise&amp;lt;void&amp;gt;
}
&lt;/pre&gt;
  &lt;h4&gt;DeBot Start&lt;/h4&gt;
  &lt;ol&gt;
    &lt;li&gt;Before starting the DeBot, DeBot Browser creates new instance of DEngine with address of DeBot.&lt;/li&gt;
    &lt;li&gt;DEngine downloads DeBot state, queries list of DInterfaces required by DeBot and returns the list to Browser.&lt;/li&gt;
    &lt;li&gt;Browser must check that it supports all required DInterfaces. If one of interfaces is not supported, Browser must report error to the user (application) and not start the DeBot otherwise Browser must list requested interfaces to user (application).&lt;/li&gt;
    &lt;li&gt;All required interfaces should be approved by user (application).&lt;/li&gt;
    &lt;li&gt;After the list of interfaces is approved, the DeBot Browser starts DeBot using &lt;code&gt;Dengine.start(callback)&lt;/code&gt;.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p&gt;On every interface call Browser should check permission for DeBot and on success execute it according to isolation requirement if needed.&lt;/p&gt;
  &lt;p&gt;Below you can see DeBot start sequence:&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://docs.ton.dev/uploads/yBE_dbFcvs_IvUC3olWCFw.svg&quot; width=&quot;661&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3&gt;DInterface specification&lt;/h3&gt;
  &lt;p&gt;Every DInterface must be discussed and accepted by DeBot Interface Specifications (DIS) Consortium before it can be used in DeBots. All accepted interfaces are published in repo:&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/tonlabs/DeBot-IS-consortium&quot; target=&quot;_blank&quot;&gt;https://github.com/tonlabs/DeBot-IS-consortium&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;Everybody can suggest new DInterface. Go to repo and follow the instructions.&lt;/p&gt;
  &lt;h3&gt;DInterfaces support in DeBot Browser&lt;/h3&gt;
  &lt;p&gt;DeBot Browser can support and implement any or all DInterfaces published in DIS repo depending on browser&amp;#x27;s capabilities. For example, console browser cannot support external devices like camera, NFC, microphone and so on.&lt;/p&gt;
  &lt;h3&gt;DEngine versioning&lt;/h3&gt;
  &lt;p&gt;DEngine as a SDK module should have a version of SDK itself.&lt;/p&gt;
  &lt;p&gt;DIS statuses: Proposed, Accepted, Published.&lt;/p&gt;
  &lt;h3&gt;Example of DInterface&lt;/h3&gt;
  &lt;p&gt;Name:&lt;/p&gt;
  &lt;p&gt;&lt;code&gt;RawInput&lt;/code&gt;&lt;/p&gt;
  &lt;p&gt;ID:&lt;/p&gt;
  &lt;p&gt;&lt;code&gt;8796536366ee21852db56dccb60bc564598b618c865fc50c8b1ab740bba128e3&lt;/code&gt;&lt;/p&gt;
  &lt;h4&gt;Description&lt;/h4&gt;
  &lt;p&gt;Allows to get string from user&lt;/p&gt;
  &lt;h4&gt;Functions&lt;/h4&gt;
  &lt;p&gt;Function &lt;code&gt;&lt;strong&gt;input&lt;/strong&gt;&lt;/code&gt;&lt;/p&gt;
  &lt;p&gt;arguments:&lt;/p&gt;
  &lt;p&gt;&lt;code&gt;answerId&lt;/code&gt;: uint32 - function id of result callback&lt;/p&gt;
  &lt;p&gt;&lt;code&gt;prompt&lt;/code&gt;: bytes - string printed to the user and describing what to enter&lt;/p&gt;
  &lt;p&gt;returns:&lt;/p&gt;
  &lt;p&gt;&lt;code&gt;text&lt;/code&gt;: bytes - string entered by user&lt;/p&gt;
  &lt;h4&gt;Declaration in Solidity&lt;/h4&gt;
  &lt;pre&gt;interface IRawInput {
	function input(uint32 answerId, string prompt) external returns (string value);
}

Library RawInput {
	uint256 constant ID_RAWINPUT = 0x8796536366ee21852db56dccb60bc564598b618c865fc50c8b1ab740bba128e3
	// Callback Function Prototype
	function inputResult(uint32 answerId, string prompt) public {
		address addr = address.makeAddrStd(DEBOT_WC, ID_RAWINPUT);
		IRawInput(addr).input(answerId, prompt);
	}
}
&lt;/pre&gt;
  &lt;h4&gt;Declaration in C++&lt;/h4&gt;
  &lt;pre&gt;namespace tvm { namespace schema {

__interface IRawInput {
  [[internal, answer_id]]
  string input(string prompt);
};

&lt;/pre&gt;
  &lt;h4&gt;Code Example&lt;/h4&gt;
  &lt;p&gt;Solidity&lt;/p&gt;
  &lt;pre&gt;pragma solidity &amp;gt;=0.6.0;
import &amp;quot;Debot.sol&amp;quot;;
import &amp;quot;RawInput.sol&amp;quot;;

contract ExampleDebot is Debot, RawInput {
	function start() public {
		RawInput.input(tvm.functionId(inputResult), &amp;quot;enter your name:&amp;quot;);
		RawInput.input(tvm.functionId(inputResult), &amp;quot;enter your wallet address:&amp;quot;);
	}

	function inputResult(string text) public override {
			require(text == &amp;quot;Debot&amp;quot;);
	}

}
&lt;/pre&gt;
  &lt;h2&gt;DeBot Special Features&lt;/h2&gt;
  &lt;p&gt;DeBots have 3 special features:&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;calling get-methods of target smart contracts;&lt;/li&gt;
    &lt;li&gt;calling external functions of target smart contracts onchain;&lt;/li&gt;
    &lt;li&gt;invoking other DeBots in a local environment.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p&gt;Ordinary TON smart contracts cannot use 1st and 2nd features because they cannot produce external inbound messages. But DeBots can, due to the fact that they are executed in DEngine, that allows DeBots to generate these kinds of messages, can send them to blockchain and return results to DeBots.&lt;/p&gt;
  &lt;p&gt;In terms of DeBots, all these features are implemented without &lt;a href=&quot;https://docs.ton.dev/86757ecb2/v/0/p/72f1b7-debot-specifications/t/51d68b&quot; target=&quot;_blank&quot;&gt;DInterfaces&lt;/a&gt; but in a native way, like two smart contracts communicating with each other - by sending messages directly to target address.&lt;/p&gt;
  &lt;p&gt;But with only one difference - to call a get-method or call a function onchain DeBot must generate external inbound message.&lt;/p&gt;
  &lt;h3&gt;Get-methods&lt;/h3&gt;
  &lt;h4&gt;Developer Example&lt;/h4&gt;
  &lt;pre&gt;// Solidity

function foo() public {
	IWallet(addr).getOwner{external: true, funcid: tvm.functionId(setOwner)}();
}

function setOwner(address owner) public {
	// Types and names of parameters should be equal 
	// to those returned by get-method &amp;#x60;getOwner&amp;#x60;
}
// C++

void foo() {
	address owner = co_await IWallet(*wallet_addr_).run().getOwner();
}
&lt;/pre&gt;
  &lt;h4&gt;Support in DEngine&lt;/h4&gt;
  &lt;p&gt;DEngine executes DeBot and checks if it produces external inbound messages. If yes then DEngine analyzes each message by scanning signature and public key bits in message body to understand if message is for get-method call. If bits are zero DEngine downloads target contract and runs its get-method, then returns results to DeBot by calling its function with id placed in &lt;code&gt;expire&lt;/code&gt; header of message body.&lt;/p&gt;
  &lt;h3&gt;Onchain function call&lt;/h3&gt;
  &lt;h4&gt;Developer example&lt;/h4&gt;
  &lt;blockquote&gt;Remark for Solidity : for now developers should use combination of two functions:&lt;/blockquote&gt;
  &lt;pre&gt;TvmCell msg = tvm.createExtMsg({
	dest: &amp;lt;addr&amp;gt;,
	time: now(),
	expire: 123,
	pubkey: &amp;lt;pubkey&amp;gt;,
	call: {IWallet.transfer, dest, amount}
});
tvm.sendrawmsg(msg);
&lt;/pre&gt;
  &lt;h4&gt;Support in DEngine&lt;/h4&gt;
  &lt;p&gt;DEngine executes DeBot and checks if it produces external inbound messages. If there is one DEngine analyzes if it is onchain call by scanning signature and public key bits in message body. If signature bit is 1 then DEngine does the following things.&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;Downloads target smart contract and emulates its transaction locally.&lt;/li&gt;
    &lt;li&gt;Checks if transaction produces outbound internal messages with funds.&lt;/li&gt;
    &lt;li&gt;Requests permission from DeBot Browser to send this message onchain. Request contains information about funds that will be spent if message will be executed onchain and message itself.&lt;/li&gt;
    &lt;li&gt;If DeBot Browser allows to send message then it must sign it and return signed message to DEngine.&lt;/li&gt;
    &lt;li&gt;DEngine sends message to blockchain.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3&gt;Invoking DeBots&lt;/h3&gt;
  &lt;p&gt;DeBot can call another DeBot by simply sending internal message to it.&lt;/p&gt;
  &lt;p&gt;After DeBot execution DEngine filters all internal messages produced by DeBot with destination addresses with workchain 0. This filter allows to separate DInterface calls (which have 0xDB workchain id) from DeBot invokes. If there are invoke messages, DEngine packs them into Invoker Interface request and sends request to Browser which must download target DeBot, call its function and return results back to DEngine.&lt;/p&gt;
  &lt;h3&gt;Security notes&lt;/h3&gt;
  &lt;p&gt;At start DeBot returns list of required DInterfaces to Browser through DEngine.&lt;/p&gt;
  &lt;p&gt;When DeBot is running, DEngine proxies all DInterface calls (except calls to builtin interfaces supported by engine itself like SDK calls) directly to Browser which must decide to execute or reject them.&lt;/p&gt;
  &lt;p&gt;Get-method calls are always allowed. Executed by DEngine.&lt;/p&gt;
  &lt;p&gt;External function calls must be approved by Browser. Executed by DEngine.&lt;/p&gt;
  &lt;p&gt;Other DeBots calls are always allowed. But executed by Browser which can block invoke if needed.&lt;/p&gt;

</content></entry><entry><id>makartis:2wj0c4PRa</id><link rel="alternate" type="text/html" href="https://teletype.in/@makartis/2wj0c4PRa?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=makartis"></link><title>DECENTRALIZEDePool Specifications</title><published>2021-03-03T06:08:48.405Z</published><updated>2021-03-03T06:27:35.643Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/da/21/da213d65-3ad9-4529-9ee4-3ba87b415240.svg"></media:thumbnail><summary type="html">&lt;img src=&quot;https://docs.ton.dev/uploads/uoyYyLt9lVfdZ-uu_vJ4bQ.svg&quot;&gt;DECENTRALIZEDePool Технические характеристики</summary><content type="html">
  &lt;p&gt;DECENTRALIZEDePool Технические характеристики&lt;/p&gt;
  &lt;p&gt;2020 (c) TON Venture Studio Ltd&lt;/p&gt;
  &lt;h2&gt;Background&lt;/h2&gt;
  &lt;p&gt;It is quite evident that to achieve high-performance properties, a network needs powerful, reliable servers with fast connectivity. At the same time, to achieve sufficient decentralization, these servers have to belong to as many owners as possible. There seems to be a contradiction between these goals.&lt;/p&gt;
  &lt;p&gt;In Proof-of-Work networks, performance is often sacrificed for decentralization. Yet, claims arise that the centralization of Bitcoin, Ethereum etc. mining power is not entirely prevented. Mining Pools centralization remains an issue, as these pools are controlled by particular entities distributing rewards. For example, almost 60% of Bitcoin mining power is concentrated in just 4 pools and around 80% of all mining power originates in China. Just 2 mining pools control 52% of Ethereum hashrate, more than 50% of which originates in China.&lt;/p&gt;
  &lt;p&gt;In Proof-of-Stake, the correlation between network performance and concentration of power (money in this case) is even more apparent, as one does not need to buy, set up, and manage complicated mining farms. It can ultimately be claimed that POS is trading performance for decentralization (look no further than EOS centralization, Steemit network overtaking etc.).&lt;/p&gt;
  &lt;p&gt;It seems that enabling small token holders to participate in network governance is a very important decentralization property.&lt;/p&gt;
  &lt;h2&gt;Motivation&lt;/h2&gt;
  &lt;p&gt;TON blockchain needs all newly created blocks to be validated in order to run correctly. For this it relies on special designated nodes called &amp;quot;Validators&amp;quot;, and offers substantial reward for their work. However, becoming a validator requires a substantial cryptocurrency deposit. The required amount might far exceed an individual validator budget. On the other hand, blockchain users with no validating system might be interested in investing in validation duty. This is where the Decentralized Pool (DePool) smart contract comes in.&lt;/p&gt;
  &lt;p&gt;There are two main use cases of DePool:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;User has no Validator capabilities but some free funds. User can support a third-party Validator and receive rewards.&lt;/li&gt;
    &lt;li&gt;User has Validator capabilities and but doesn&amp;#x27;t have necessary amount of funds to participate in validator elections and subsequent rewards.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2&gt;Basic terms&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;DePool&lt;/strong&gt; - a smart contract that allows other smart contracts to invest stakes into a common pool of funds and after some period of time to receive it back with interest.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Elector&lt;/strong&gt; - a system level smart contract, deployed to masterchain from zero state. Runs validator elections periodically.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;DePool Proxy (proxy)&lt;/strong&gt; - a smart contract that delivers messages between DePool and Elector.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Participant&lt;/strong&gt; - a smart contract that invests funds into DePool.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Validator&lt;/strong&gt; - software running blockchain node. Each DePool works with one node only. This node must be a DePool participant.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Validator wallet&lt;/strong&gt; - a smart contract that is used by Validator to send election requests to DePool and receive the Validator reward. Validator wallet should be a Multisig contract with 3 custodians.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;DePool Helper&lt;/strong&gt; - a smart contract that stores the address of the actual DePool and works with the Timer contract.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Global Validators Set (GVS)&lt;/strong&gt; - current set of validators chosen in the latest elections.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Validation period&lt;/strong&gt; - period of time for which GVS is elected.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Investment round&lt;/strong&gt; - period of time between Participant investing a stake in DePool and receiving it back (with or without interest).&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Timer&lt;/strong&gt; - a smart contract that can call other smart contracts periodically.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2&gt;Architecture&lt;/h2&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://docs.ton.dev/uploads/uoyYyLt9lVfdZ-uu_vJ4bQ.svg&quot; width=&quot;758&quot; /&gt;
  &lt;/figure&gt;
  &lt;ol&gt;
    &lt;li&gt;DePool is designed to receive investment stakes from Participants, allocate the pool funds to a validator in order to participate in elections of the GVS and, after the end of the validation cycle, distribute stakes with certain rewards back to the Participants.&lt;/li&gt;
    &lt;li&gt;DePool is deployed to basechain. But it cannot communicate with Elector directly, because Elector rejects messages from non-masterchain contracts. Thus there are DePool proxies that are deployed to masterchain and deliver messages from DePool to Elector and back. This is done, because DePool is a large and complex contract, and gas and storage fees are 10 times lower in basechain compared to masterchain. Keeping DePool on masterchain would be unreasonably expensive.&lt;/li&gt;
    &lt;li&gt;DePool is open for Participants’ stakes at all times, however, there is a deadline for participation in the upcoming elections. The deadline depends on the timer of the Elector. After the deadline, the incoming stakes will be accumulated for participation in the next elections.&lt;/li&gt;
    &lt;li&gt;DePool distinguishes stakes received before the deadline and after the deadline, therefore it stores information on Participant stakes in separate &lt;strong&gt;investment rounds (or rounds)&lt;/strong&gt;, one for every elections, to facilitate subsequent distribution of stakes and rewards. To separate Elector communication, DePool uses 2 proxies: one for even rounds, one for odd.&lt;/li&gt;
    &lt;li&gt;In order to be time-aware, the DePool should be called from time to time. For this purpose the Timer contract is used. DePool Helper asks Timer to call it periodically and transmits every call from Timer to DePool. Interval between calls is chosen according to the elections interval.&lt;/li&gt;
    &lt;li&gt;DePool must be linked to a validator wallet to participate in elections on behalf of the latter. This validator wallet address is specified during DePool deployment and cannot be changed afterwards. When elections start, DePool waits for signed election requests from linked wallet, then attaches round stake to request and transmits it to Elector.&lt;/li&gt;
    &lt;li&gt;Validator can validate many DePools with 1 Validator wallet. Reputation of Validator wallet therefore is available and can be analyzed over time.&lt;/li&gt;
    &lt;li&gt;To ensure that the validator will perform its functions correctly (be always online and not &amp;quot;lie&amp;quot; to other validators), the validator wallet must itself become a Participant and invest in every investment round at least &lt;strong&gt;m_validatorAssurance&lt;/strong&gt;, which is initialized in DePool constructor. This can be achieved with any of the three available types of stakes.&lt;/li&gt;
    &lt;li&gt;When Elector unfreezes validator stakes, DePool returns its stake back with round rewards. Part of the total reward is used to top up the DePool&amp;#x27;s own balance to a certain value. The rest is distributed as follows: &lt;strong&gt;m_validatorRewardFraction%&lt;/strong&gt; goes to Validator wallet balance. &lt;strong&gt;m_participantRewardFraction%&lt;/strong&gt; is distributed among all Participants in investment round (validator is also participant). &lt;strong&gt;m_associationRewardFraction%&lt;/strong&gt; (can be equal to zero) goes to &lt;strong&gt;m_association&lt;/strong&gt; address.&lt;/li&gt;
    &lt;li&gt;DePool keeps a balance for each Participant and can automatically reinvest Participant&amp;#x27;s stake into the next investment round if appropriate flag is enabled.&lt;/li&gt;
    &lt;li&gt;Participant can transfer part of its total stake to another Participant&amp;#x27;s stake inside DePool storage. This function allows for collateralization of the stake to provide liquidity to stake holders.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h2&gt;Special kinds of stakes&lt;/h2&gt;
  &lt;p&gt;Along with the basic ordinary stake, that functions according to the rules detailed above, there are 2 types of special stakes: vesting and lock stake.&lt;/p&gt;
  &lt;p&gt;While the entire ordinary stake is invested into the current pooling round (and will thus be reinvested every second round), lock and vesting stakes are split into two equal parts upon reception, which are invested into the current pooling round, and the next round. This way they can be continuously reinvested into both odd and even rounds.&lt;/p&gt;
  &lt;h4&gt;Vesting Stake&lt;/h4&gt;
  &lt;p&gt;Any address can make a vesting stake and define a target participant address (&lt;strong&gt;beneficiary&lt;/strong&gt;) who will own this stake. But not the whole stake is available to the &lt;strong&gt;beneficiary&lt;/strong&gt; at once. Instead it is split into logical parts and the next part of stake becomes available to the participant only when next vesting period is ended. At completion step of every round DePool decides how many vesting parts should be unlocked and subtracted from vesting stake and become available to owner since last unlocking. These funds are added to beneficiary&amp;#x27;s ordinary stake.&lt;/p&gt;
  &lt;p&gt;Example: address A makes a vesting stake of 120 tons for 1 year with vesting period of 1 month and defines address B as the stake &lt;strong&gt;beneficiary&lt;/strong&gt;. It means that after 1 month 10 tons become available to address B and 110 tons are still locked in the pool. After 1 year vesting stake will be equal to 0 and last 10 tons will become available to owner.&lt;/p&gt;
  &lt;p&gt;Vesting for validator beneficiaries is subject to additional rules: At the end of every withdrawal period, the part of the vesting stake to be released is divided proportionally into 2 parts - for rounds in this period when DePool successfully completed validation and received a reward (without slashing) and for rounds when DePool missed elections or was slashed. The portion of the stake corresponding to the successful rounds is sent to the validator, while the portion corresponding to the failed rounds is returned to the vesting stake owner. For example, if there were 100 rounds within the withdrawal period, and DePool successfully completed 80 of them, missed elections in 5 more and was slashed in the remaining 15, the validator will receive 80% of the unlocked part of the vesting stake, and the stake owner will get back 20% of it.&lt;/p&gt;
  &lt;h4&gt;LockStake&lt;/h4&gt;
  &lt;p&gt;Any address can make a lock stake, in which it locks its funds in DePool for a defined period, but rewards from this stake will be payed to another target participant (&lt;strong&gt;beneficiary)&lt;/strong&gt;. At the end of a period the Lock Stake should be returned to the address which locked it.&lt;/p&gt;
  &lt;p&gt;Example: address A makes a lock stake of 120 tons for 1 year with vesting period of 1 month and defines address B as the stake &lt;strong&gt;beneficiary&lt;/strong&gt;. It means that after 1 month 10 tons become available to address A (as opposed to vesting, where these 10 tons would become available to address B, the beneficiary) and 110 tons are still locked in round. DePool will reinvest the gradually diminishing lock stake for a 1 year and pay rewards to B address. After 1 year DePool will return the remainder of the lock stake to address A.&lt;/p&gt;
  &lt;blockquote&gt;One Participant can be a beneficiary only of one lock and one vesting stake. Once current lock or vesting stake of the participant expires, it can be repeated. When a stake of either of these types is created, it is split equally into two last rounds, which means that the minimal value for such stake is 2 * &lt;code&gt;minStake&lt;/code&gt; + fee.&lt;/blockquote&gt;
  &lt;h2&gt;Specification&lt;/h2&gt;
  &lt;h3&gt;Data Structures&lt;/h3&gt;
  &lt;p&gt;DePool contract uses library and inheritance from several simple base contacts to separate functionality and facilitate development and debugging of the contract. The core data set stored by DePool is the following:&lt;/p&gt;
  &lt;p&gt;&lt;code&gt;DePoolLib.sol&lt;/code&gt;&lt;/p&gt;
  &lt;pre&gt;// Describes contract who deposit stakes in DePool pool
struct Participant {
    // Count of rounds in which participant takes a part
    uint8 roundQty;
    // Sum of all rewards from completed rounds (for logging)
    uint64 reward;
    // count of parts of vesting stakes in the rounds
    uint8 vestingParts;
    // count of parts of lock stakes in the rounds
    uint8 lockParts;
    // Flag whether to reinvest ordinary stakes and rewards
    bool reinvest;
    // Target tons that will be transferred to participant after rounds are completed
    // After each round this value is decreased
    uint64 withdrawValue;
}

// Request for elections from validator wallet.
struct Request {
    // Random query id.
    uint64 queryId;
    // Validator&amp;#x27;s public key that will be used as validator key if validator will win elections.
    uint256 validatorKey;
    // current election id.
    uint32 stakeAt;
    // Validator&amp;#x27;s stake factor.
    uint32 maxFactor;
    // Validator&amp;#x27;s address in adnl overlay network.
    uint256 adnlAddr;
    // Ed25519 signature of above values.
    bytes signature;
}
&lt;/pre&gt;
  &lt;p&gt;&lt;code&gt;DePoolRounds.sol&lt;/code&gt;&lt;/p&gt;
  &lt;pre&gt;// roundPre0 = m_rounds[m_roundQty - 1] - pre-pooling. Helper round for adding vesting and lock stakes. When vesting/lock stake
//                                        is added than stake is split into two part. And first part invested into pooling round
//                                        and second part - pre-pooling.
// round0    = m_rounds[m_roundQty - 2] - pooling
// round1    = m_rounds[m_roundQty - 3] - election or validation
// round2    = m_rounds[m_roundQty - 4] - validation or investigation
// Algo of round rotation:
//     delete round2
//     round1         -&amp;gt; round2
//     round0         -&amp;gt; round1
//     roundPre0      -&amp;gt; round0
//     createNewRound -&amp;gt; roundPre0
mapping(uint64 =&amp;gt; Round) m_rounds;

// count of created rounds
uint64 m_roundQty = 0;
&lt;/pre&gt;
  &lt;p&gt;&lt;code&gt;DePoolBase.sol&lt;/code&gt;&lt;/p&gt;
  &lt;pre&gt;// Dictionary of participants for rounds
mapping (address =&amp;gt; Participant) m_participants;

// Address of the validator wallet
address m_validatorWallet;

// Array of proxies addresses.
address[] m_proxies;
&lt;/pre&gt;
  &lt;p&gt;&lt;code&gt;DePool.sol&lt;/code&gt;&lt;/p&gt;
  &lt;pre&gt;// Indicates that pool is closed. Closed pool doesn&amp;#x27;t accept stakes from other contracts.
bool m_poolClosed;
// Min stake accepted to the pool in nTon (for gas efficiency reasons): 10 tons is recommended.
uint64 m_minStake;
// Minimum validator stake in each round
uint64 m_validatorAssurance;
// % of participant rewards
uint8 m_participantRewardFraction;
// % of validator rewards
uint8 m_validatorRewardFraction;
// % of dePool association rewards
uint8 m_associationRewardFraction;
// Association address
address m_association;
// Minimum balance
uint64 m_minimumBalance;
&lt;/pre&gt;
  &lt;h3&gt;DePool Initialization&lt;/h3&gt;
  &lt;p&gt;When deployed, the DePool constructor is called with the following parameters:&lt;/p&gt;
  &lt;pre&gt;/// @dev DePool&amp;#x27;s constructor.
/// @param minStake Min stake that participant may have in one round.
/// @param validatorAssurance Min validator stake.
/// @param proxyCode Code of proxy contract.
/// @param validatorWallet Address of validator wallet.
/// @param participantRewardFraction % of reward that distributed among participants.
constructor(
    uint64 minStake,
    uint64 validatorAssurance,
    TvmCell proxyCode,
    address validatorWallet,
    uint8 participantRewardFraction,
)
&lt;/pre&gt;
  &lt;p&gt;At initialization the variable &lt;code&gt;m_balanceThreshold&lt;/code&gt; is set as current DePool account balance - 5 tokens. DePool will replenish its balance from validation rewards to this value every round it receives rewards.&lt;/p&gt;
  &lt;h3&gt;Participant functions&lt;/h3&gt;
  &lt;p&gt;DePool stores some participant information in a dictionary (&lt;code&gt;m_participants&lt;/code&gt;) where key - Participant&amp;#x27;s address and value - &lt;code&gt;Participant&lt;/code&gt; structure.&lt;/p&gt;
  &lt;p&gt;Functions used by participants perform checks and send &lt;code&gt;receiveAnswer&lt;/code&gt; message back to the caller with an error code and a comment in case of failure. If all conditions are met, DePool sends a confirmation message (&lt;code&gt;receiveAnswer&lt;/code&gt; with status 0) back to the caller.&lt;/p&gt;
  &lt;p&gt;All functions can be called by internal messages only.&lt;/p&gt;
  &lt;p&gt;1. &lt;code&gt;&lt;strong&gt;addOrdinaryStake(uint64 stake)&lt;/strong&gt;&lt;/code&gt; - allows to make an ordinary stake in the current pooling round. The source address of the message is taken as Participant&amp;#x27;s address. The Participant&amp;#x27;s total stake is increased by &lt;code&gt;stake&lt;/code&gt; amount.&lt;/p&gt;
  &lt;p&gt;Parameters:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;stake&lt;/code&gt; - value of participant&amp;#x27;s stake in nanotons.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Function checks that:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;inbound message value is at least &lt;code&gt;(stake + ADD_STAKE_FEE)&lt;/code&gt;;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;stake&lt;/code&gt; is at least min stake;&lt;/li&gt;
    &lt;li&gt;pool is not closed.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Function returns change (part of unused &lt;code&gt;ADD_STAKE_FEE&lt;/code&gt;).&lt;/p&gt;
  &lt;p&gt;2. &lt;code&gt;&lt;strong&gt;addVestingStake(uint64 stake, address beneficiary, uint32 withdrawalPeriod, uint32 totalPeriod)&lt;/strong&gt;&lt;/code&gt; - allows to add a vesting stake for another participant (beneficiary). The source address of the message is saved as the vesting stake owner.&lt;/p&gt;
  &lt;p&gt;Parameters:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;stake&lt;/code&gt; - value of participant&amp;#x27;s stake in nanotons (Note: this value is divided into 2 parts and is added to 2 rounds).&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;beneficiary&lt;/code&gt; - address of target participant (beneficiary);&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;withdrawalPeriod&lt;/code&gt; - the period in seconds after which the part of the vesting becomes available for beneficiary;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;totalPeriod&lt;/code&gt; - total period of vesting in seconds after which beneficiary becomes owner of the whole stake.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Function checks that:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;DePool is not closed (&lt;code&gt;m_poolClosed&lt;/code&gt; ≠ true);&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;beneficiary&lt;/code&gt; is an addr_std. It&amp;#x27;s not zero address. It&amp;#x27;s not the message sender (not self vesting);&lt;/li&gt;
    &lt;li&gt;inbound &lt;code&gt;msg.value&lt;/code&gt;≥ (&lt;code&gt;m_minStake&lt;/code&gt;+ &lt;code&gt;ADD_STAKE_FEE&lt;/code&gt;);&lt;/li&gt;
    &lt;li&gt;Message value is at least &lt;code&gt;stake + STAKE_FEE&lt;/code&gt;;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;stake/2&lt;/code&gt; is at least min stake;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;withdrawalPeriod&lt;/code&gt; ≤ &lt;code&gt;totalPeriod&lt;/code&gt;;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;totalPeriod&lt;/code&gt; &amp;lt; 18 years;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;withdrawalPeriod&lt;/code&gt; ≠ 0;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;totalPeriod&lt;/code&gt; % &lt;code&gt;withdrawalPeriod&lt;/code&gt; = 0;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;beneficiary&lt;/code&gt; doesn&amp;#x27;t have a vesting stake.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;3. &lt;code&gt;&lt;strong&gt;addLockStake(uint64 stake, address beneficiary, uint32 withdrawalPeriod, uint32 totalPeriod)&lt;/strong&gt;&lt;/code&gt; - allows to add a stake that will bring rewards to another participant (beneficiary). The source address of the message is saved as the lock stake owner.&lt;/p&gt;
  &lt;p&gt;It has the same parameters and checks as &lt;code&gt;addVestingStake&lt;/code&gt;, but it checks that participant doesn&amp;#x27;t have a lock stake instead of a vesting stake.&lt;/p&gt;
  &lt;p&gt;4. &lt;code&gt;&lt;strong&gt;withdrawFromPoolingRound(uint64 withdrawValue)&lt;/strong&gt;&lt;/code&gt; - allows to remove Participant&amp;#x27;s stake from the current pooling round.&lt;/p&gt;
  &lt;p&gt;Parameters:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;withdrawValue&lt;/code&gt;- desired amount of stake to be removed.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Function checks that:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;inbound &lt;code&gt;msg.sender&lt;/code&gt; address is address of an existing participant.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;If real ordinary stake is less than &lt;code&gt;withdrawValue&lt;/code&gt;, then DePool returns the whole stake from pooling round.&lt;/p&gt;
  &lt;p&gt;If the remaining stake in the pooling round is less than &lt;code&gt;m_minStake&lt;/code&gt;, then the whole stake is transferred to Participant.&lt;/p&gt;
  &lt;p&gt;If the remaining total stake of Participant is 0, then it is removed from the &lt;code&gt;m_stakeholders&lt;/code&gt; dictionary.&lt;/p&gt;
  &lt;p&gt;5. &lt;code&gt;&lt;strong&gt;withdrawPart(uint64 withdrawValue)&lt;/strong&gt;&lt;/code&gt; - Allows a participant to withdraw some value from DePool. This function withdraws &lt;code&gt;withdrawValue&lt;/code&gt; nanotons when rounds are completed. If participant stake becomes less than &lt;code&gt;minStake&lt;/code&gt;, then the whole stake is sent to participant.&lt;/p&gt;
  &lt;p&gt;Parameters:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;withdrawValue&lt;/code&gt;- desired amount of stake to be removed.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Function checks that:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;pool is not closed (&lt;code&gt;m_poolClosed&lt;/code&gt; ≠ true)&lt;/li&gt;
    &lt;li&gt;inbound &lt;code&gt;msg.sender&lt;/code&gt; address is address of an existing participant.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;blockquote&gt;If the remaining stake in the round is less than &lt;code&gt;m_minStake&lt;/code&gt;, then the whole stake will be transferred to Participant (after completing round).&lt;/blockquote&gt;
  &lt;blockquote&gt;If the remaining total stake of Participant is 0, then it is removed from the &lt;code&gt;m_stakeholders&lt;/code&gt; dictionary.&lt;/blockquote&gt;
  &lt;p&gt;6. &lt;code&gt;&lt;strong&gt;withdrawAll()&lt;/strong&gt;&lt;/code&gt; - Set global flag for the participant that indicates to return participant&amp;#x27;s ordinary stake after completing rounds.&lt;/p&gt;
  &lt;p&gt;Function checks that:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;pool is not closed (&lt;code&gt;m_poolClosed&lt;/code&gt; ≠ true);&lt;/li&gt;
    &lt;li&gt;inbound &lt;code&gt;msg.sender&lt;/code&gt; address is address of an existing participant.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;blockquote&gt;After transferring all Participant&amp;#x27;s stake, the Participant will be removed from the &lt;code&gt;m_stakeholders&lt;/code&gt; dictionary.&lt;/blockquote&gt;
  &lt;p&gt;7. &lt;code&gt;&lt;strong&gt;cancelWithdrawal()&lt;/strong&gt;&lt;/code&gt; - Cancel effect of calls of functions &lt;code&gt;withdrawAll&lt;/code&gt; and &lt;code&gt;withdrawPart&lt;/code&gt;.&lt;/p&gt;
  &lt;p&gt;8. &lt;code&gt;&lt;strong&gt;transferStake(address dest, uint64 amount)&lt;/strong&gt;&lt;/code&gt; - allows to move &lt;code&gt;amount&lt;/code&gt; of stake from &lt;code&gt;msg.sender&lt;/code&gt; Participant to &lt;code&gt;dest&lt;/code&gt; Participant inside DePool storage.&lt;/p&gt;
  &lt;p&gt;Parameters:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;dest&lt;/code&gt; - stake beneficiary;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;amount&lt;/code&gt; - stake value transferred to dest in nanotons.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Function checks that:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;pool is not closed (&lt;code&gt;m_poolClosed&lt;/code&gt;≠ true);&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;destination&lt;/code&gt; is a non-zero addr_std;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;msg.sender&lt;/code&gt; ≠ &lt;code&gt;dest&lt;/code&gt;;&lt;/li&gt;
    &lt;li&gt;neither &lt;code&gt;destination&lt;/code&gt; nor &lt;code&gt;msg.sender&lt;/code&gt; is the validator wallet;&lt;/li&gt;
    &lt;li&gt;inbound &lt;code&gt;msg.sender&lt;/code&gt; address is address of an existing participant;&lt;/li&gt;
    &lt;li&gt;desired &lt;code&gt;amount&lt;/code&gt; can be transferred and transfer doesn&amp;#x27;t leave stake less than &lt;code&gt;m_minStake&lt;/code&gt; in any round.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;blockquote&gt;In case of success DePool sends back a notification via onTransfer function calling to beneficiary.&lt;/blockquote&gt;
  &lt;h4&gt;Functions of interface DePoolInfoGetter:&lt;/h4&gt;
  &lt;p&gt;&lt;code&gt;function getLastRoundInfo() public&lt;/code&gt;&lt;/p&gt;
  &lt;p&gt;If there is no completed round yet, call callback function &lt;code&gt;receiveDePoolInfo&lt;/code&gt; with struct containing default values, else send call with struct containing info about last completed round.&lt;/p&gt;
  &lt;pre&gt;// Represent info about last completed round
struct LastRoundInfo {
    uint32 supposedElectedAt;
    uint8 participantRewardFraction;
    uint8 validatorRewardFraction;
    uint32 participantQty;
    uint64 roundStake;
    address validatorWallet;
    uint256 validatorPubkey;
    uint64 validatorAssurance;
}
&lt;/pre&gt;
  &lt;h4&gt;Participant callback functions:&lt;/h4&gt;
  &lt;p&gt;These functions are called by DePool to send notifications to Participant.&lt;/p&gt;
  &lt;p&gt;1. &lt;code&gt;&lt;strong&gt;receiveAnswer(uint32 errcode, uint64 comment)&lt;/strong&gt;&lt;/code&gt; - function, which is called as an answer from DePool to Participant.&lt;/p&gt;
  &lt;p&gt;Arguments:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;errcode&lt;/code&gt; - error code. List of codes:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre&gt;uint8 constant STATUS_SUCCESS                                        =  0;
uint8 constant STATUS_STAKE_TOO_SMALL                                =  1;
uint8 constant STATUS_DEPOOL_CLOSED                                  =  3;
uint8 constant STATUS_NO_PARTICIPANT                                 =  6;
uint8 constant STATUS_PARTICIPANT_HAVE_ALREADY_VESTING               =  9;
uint8 constant STATUS_WITHDRAWAL_PERIOD_GREATER_TOTAL_PERIOD         = 10;
uint8 constant STATUS_TOTAL_PERIOD_MORE_18YEARS                      = 11;
uint8 constant STATUS_WITHDRAWAL_PERIOD_IS_ZERO                      = 12;
uint8 constant STATUS_TOTAL_PERIOD_IS_NOT_DIVED_BY_WITHDRAWAL_PERIOD = 13;
uint8 constant STATUS_PERIOD_PAYMENT_IS_ZERO                         = 14;
uint8 constant STATUS_REMAINING_STAKE_LESS_THAN_MINIMAL              = 16;
uint8 constant STATUS_PARTICIPANT_HAVE_ALREADY_LOCK                  = 17;
uint8 constant STATUS_TRANSFER_AMOUNT_IS_TOO_BIG                     = 18;
uint8 constant STATUS_TRANSFER_SELF                                  = 19;
uint8 constant STATUS_TRANSFER_TO_OR_FROM_VALIDATOR                  = 20;
uint8 constant STATUS_FEE_TOO_SMALL                                  = 21;
uint8 constant STATUS_INVALID_ADDRESS                                = 22;
uint8 constant STATUS_INVALID_BENEFICIARY                            = 23;
uint8 constant STATUS_NO_ELECTION_ROUND                              = 24;
uint8 constant STATUS_INVALID_ELECTION_ID                            = 25;
&lt;/pre&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;comment&lt;/code&gt; - some value attached to error code.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;2. &lt;code&gt;&lt;strong&gt;onTransfer(address source, uint128 amount)&lt;/strong&gt;&lt;/code&gt; - function, which is called after successful &lt;code&gt;transferStake&lt;/code&gt; to inform beneficiary.&lt;/p&gt;
  &lt;p&gt;Arguments:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;source&lt;/code&gt; - address of Participant who made transfer;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;amount&lt;/code&gt; - funds that were transferred.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;3. &lt;code&gt;&lt;strong&gt;onRoundComplete(uint64 roundId, uint64 reward, uint64 ordinaryStake, uint64 vestingStake, bool reinvest, uint8 reason)&lt;/strong&gt;&lt;/code&gt; - send a notification from DePool to Participant when round is completed:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;roundId&lt;/code&gt; - Id of completed round;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;reward&lt;/code&gt; - Participant&amp;#x27;s reward in completed round in nanotons;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;ordinaryStake&lt;/code&gt;- ordinary stake in completed round;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;vestingStake&lt;/code&gt; - vesting stake in completed round;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;lockStake&lt;/code&gt; - lock stake in completed round;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;reinvest&lt;/code&gt; - are ordinary stakes automatically reinvested (prolonged)?&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;reason&lt;/code&gt; - reason why round is completed (See enum CompletionReason).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h4&gt;DePool owner functions:&lt;/h4&gt;
  &lt;p&gt;These functions can be called only by the DePool owner, &lt;strong&gt;as they have to be signed with the deploy keypair&lt;/strong&gt;.&lt;/p&gt;
  &lt;p&gt;1. &lt;code&gt;terminator()&lt;/code&gt; &lt;strong&gt;[external msg only]&lt;/strong&gt; - a method to close DePool. All stakes from all rounds are returned in several phases:&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;first of all, stakes from pooling round are returned immediately.&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;m_poolClosed&lt;/code&gt; = true;&lt;/li&gt;
    &lt;li&gt;All other rounds will return stakes after their &amp;quot;completed&amp;quot; step.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: remaining parts of vesting/lock stakes will be sent to owners of those stakes (not to beneficiaries)&lt;/p&gt;
  &lt;p&gt;2. &lt;code&gt;setValidatorRewardFraction(uint8 fraction)&lt;/code&gt; &lt;strong&gt;[external msg only]&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Sets new validator&amp;#x27;s reward fraction and calculates new participants&amp;#x27; reward fraction. New validator&amp;#x27;s reward fraction must be less than current one and be not zero.&lt;/p&gt;
  &lt;p&gt;&lt;code&gt;fraction&lt;/code&gt; - new validator&amp;#x27;s reward fraction.&lt;/p&gt;
  &lt;h4&gt;Events&lt;/h4&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;code&gt;DePoolClosed()&lt;/code&gt; - event emitted when pool is closed by &lt;code&gt;terminator()&lt;/code&gt; function.&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;RoundStakeIsAccepted(uint64 queryId, uint32 comment)&lt;/code&gt; - event is emitted on accepting stake by elector.&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;RoundStakeIsRejected(uint64 queryId, uint32 comment)&lt;/code&gt; - event is emitted on rejecting stake by elector.&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;ProxyHasRejectedTheStake(uint64 queryId)&lt;/code&gt; - event is emitted if stake is returned by proxy (IProxy.process_new_stake) because too low balance of proxy contract.&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;ProxyHasRejectedRecoverRequest(uint64 roundId)&lt;/code&gt; - event is emitted if stake cannot be returned from elector (IProxy.recover_stake) because too low balance of proxy contract.&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;RoundCompleted(TruncatedRound round)&lt;/code&gt; - event is emitted on completing round.&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;StakeSigningRequested(uint32 electionId, address proxy)&lt;/code&gt; - Event emitted when round is switched from pooling to election. DePool is waiting for signed election request from validator wallet.&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;TooLowDePoolBalance(uint replenishment)&lt;/code&gt; - event emitted when pure DePool&amp;#x27;s balance becomes too low. &lt;code&gt;replenishment&lt;/code&gt; minimal value that must be sent to DePool via &lt;code&gt;receiveFunds&lt;/code&gt; function.&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;RewardFractionsChanged(uint8 validator, uint8 participants)&lt;/code&gt; - event emitted when contract owner changes reward fractions. validator - validator&amp;#x27;s reward fraction. participants - participants&amp;#x27; reward fraction.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3&gt;Get-methods&lt;/h3&gt;
  &lt;p&gt;These get-methods are used for local run.&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;code&gt;getParticipantInfo(address addr)&lt;/code&gt; - returns participant&amp;#x27;s information about stakes in every rounds;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;getDePoolInfo()&lt;/code&gt; - returns DePool configuration parameters and constants;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;getParticipants()&lt;/code&gt; - return list of all participants;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;getRounds()&lt;/code&gt; - returns information about all rounds.&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;getDePoolBalance()&lt;/code&gt; - returns DePool&amp;#x27;s own balance in nanotokens.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;blockquote&gt;The DePool does not store validator public keys or ADNL address, because, according to the official TON guide, the Validator generates a new keypair and ADNL for every elections. The contract stores only Validator wallet address.&lt;/blockquote&gt;
  &lt;h3&gt;State update function&lt;/h3&gt;
  &lt;p&gt;&lt;code&gt;ticktock()&lt;/code&gt; - this function is the &amp;quot;engine&amp;quot; of DePool. This function rotates rounds: creates a new round if necessary and removes an old one. Switches steps of rounds and calls various internal functions if certain conditions are satisfied and so on.&lt;/p&gt;
  &lt;p&gt;&lt;code&gt;ticktock()&lt;/code&gt; does not &lt;code&gt;accept&lt;/code&gt; external inbound messages and can be called only from other contracts. &lt;code&gt;ticktock&lt;/code&gt; returns unspent message value (change) back to caller.&lt;/p&gt;
  &lt;h3&gt;Multi-Round elections&lt;/h3&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://docs.ton.dev/uploads/g6tJIGzugt3vkr7YNQTaCg.png&quot; width=&quot;1033&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Every round goes through several steps:&lt;/p&gt;
  &lt;p&gt;1. &amp;quot;&lt;strong&gt;PrePooling&lt;/strong&gt;&amp;quot; step (RoundStep.PrePooling) - it&amp;#x27;s an imaginary round introduced to store half of vesting/lock stake from participants. See &lt;code&gt;addVestingStake/addLockStake&lt;/code&gt; functions.&lt;/p&gt;
  &lt;p&gt;2. &amp;quot;&lt;strong&gt;Pooling&lt;/strong&gt;&amp;quot; step (RoundStep.Pooling) - round is ready to accept stakes from Participants. This round receives ordinary, vesting and lock stakes.&lt;/p&gt;
  &lt;p&gt;3. &amp;quot;&lt;strong&gt;waiting for election requests&lt;/strong&gt;&amp;quot; step (RoundStep.WaitingValidatorRequest) - round is switched to this step when validator elections begin. DePool is waiting for signed election request from validator wallet. See &lt;code&gt;process_new_stake&lt;/code&gt; function of &lt;a href=&quot;https://github.com/ton-blockchain/ton/blob/master/crypto/smartcont/elector-code.fc&quot; target=&quot;_blank&quot;&gt;Elector&lt;/a&gt; to properly generate election request.&lt;/p&gt;
  &lt;blockquote&gt;&lt;strong&gt;Important&lt;/strong&gt;: Validator wallet must also be a Participant and invest at least &lt;code&gt;m_validatorAssurance&lt;/code&gt; stake in the round. If it doesn&amp;#x27;t, round is completed and stakes are reinvested in another round or are returned to participants.&lt;/blockquote&gt;
  &lt;p&gt;4. &amp;quot;&lt;strong&gt;Waiting if stake is accepted by elector&lt;/strong&gt;&amp;quot; (RoundStep.WaitingIfStakeAccepted) - DePool has received the validator signed election request. DePool has sent the whole round stake to elector through one of its proxies. Now DePool is waiting for elector answer. Note: elector will call DePool&amp;#x27;s &lt;code&gt;onStakeAccept&lt;/code&gt; function if election request is accepted successfully or &lt;code&gt;onStakeReject&lt;/code&gt; in case of an error.&lt;/p&gt;
  &lt;p&gt;5. &amp;quot;&lt;strong&gt;waiting for validation start&lt;/strong&gt;&amp;quot; (RoundStep.WaitingValidationStart) - round stake was accepted by elector. Validator is a candidate. DePool now is waiting for the start of the validation to find out if validator won the elections.&lt;/p&gt;
  &lt;p&gt;6. &amp;quot;&lt;strong&gt;waiting for election result&lt;/strong&gt;&amp;quot; (RoundStep.WaitingIfValidatorWinElections) - DePool has tried to recover stake in validation period to find out if validator won elections. Waiting for elector answer. Note: If validator won the elections, elector returns no stake. If Validator lost the elections, elector returns the whole stake.&lt;/p&gt;
  &lt;p&gt;7. &amp;quot;&lt;strong&gt;waiting stake unfreeze&lt;/strong&gt;&amp;quot; (RoundStep.WaitingUnfreeze) - If &lt;code&gt;CompletionReason!=Undefined&lt;/code&gt;, the round is waiting round rotation to return/reinvest funds because elections were lost. Else validator won elections. DePool is waiting for ending of unfreeze period to recover funds from elector.&lt;/p&gt;
  &lt;p&gt;8. &amp;quot;&lt;strong&gt;waiting for a reward&lt;/strong&gt;&amp;quot; (RoundStep.WaitingReward) - Unfreeze period has been ended. Request to recover stake has been sent to elector. DePool is waiting for answer from elector.&lt;/p&gt;
  &lt;p&gt;9. &amp;quot;&lt;strong&gt;completing&lt;/strong&gt;&amp;quot; step (RoundStep.Completing) - DePool receives reward and replenishes its balance from it. Then it returns or reinvests participant&amp;#x27;s stakes. Also on this step DePool recounts vesting and lock stakes and modifies them if necessary.&lt;/p&gt;
  &lt;p&gt;10. &amp;quot;&lt;strong&gt;completed&lt;/strong&gt;&amp;quot; (RoundStep.Completed) - round switches to this step after processing all the Participants in the round. In next &lt;code&gt;ticktock&lt;/code&gt; this round will be deleted.&lt;/p&gt;
  &lt;h3&gt;Round completion&lt;/h3&gt;
  &lt;p&gt;When a round switches to &amp;quot;completing&amp;quot; step (&lt;code&gt;completeRound&lt;/code&gt; function), the DePool replenishes its balance from received rewards and then starts to cycle through all stakes in the round. If Participant&amp;#x27;s reinvestment flag is &lt;code&gt;false&lt;/code&gt;, DePool sends it back to the Participant, otherwise - adds it to the pooling round. Also DePool sends notification message (&lt;code&gt;onRoundComplete&lt;/code&gt;) to Participant.&lt;/p&gt;
  &lt;p&gt;DePool goes through all vesting and lock stakes of the completing round and checks whether a withdrawal period has finished for the current stake. If it has, DePool modifies the stake via transferring part of it to Participants ordinary stake (in case of Vesting) and/or transferring part of the stake back to the owner (in case of Lock or in case of Vesting for validator which was slashed or lost elections over the course of the completed withdrawal period).&lt;/p&gt;
  &lt;blockquote&gt;&lt;strong&gt;Remark&lt;/strong&gt;: if there are 15000 stakes in round, then the contract should split completion to 375 transactions sending 375 &lt;code&gt;completePendingRound&lt;/code&gt; messages to itself. All these transactions can fit in 1-2 blocks and the whole operation will take about 5-20 seconds.&lt;/blockquote&gt;
  &lt;h2&gt;DePool decentralization&lt;/h2&gt;
  &lt;ol&gt;
    &lt;li&gt;No inherent way to replace the contract code (no SETCODE);&lt;/li&gt;
    &lt;li&gt;No inherent way to transfer an arbitrary amount of currency from the DePool;&lt;/li&gt;
    &lt;li&gt;Any contract can call the &lt;code&gt;ticktock()&lt;/code&gt; function to update the state of the DePool;&lt;/li&gt;
    &lt;li&gt;No one has special privileges, except for deployer of DePool who can only close DePool and start a procedure of returning all stakes back to Participants;&lt;/li&gt;
    &lt;li&gt;Fees cannot be changed after the contract is deployed;&lt;/li&gt;
    &lt;li&gt;Validator wallet must be a Participant as well to share risks with other Participants.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h2&gt;DePool contract fee&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;Caller of DePool&amp;#x27;s &lt;code&gt;ticktock&lt;/code&gt; function must pay for consumed gas. Unused message value is returned back when &lt;code&gt;ticktock&lt;/code&gt; is finished.&lt;/li&gt;
    &lt;li&gt;At the beginning of completing step DePool first takes from the total reward an amount of tokens to replenish it&amp;#x27;s balance to &lt;code&gt;m_balanceThreshold&lt;/code&gt;, and then additionally &lt;code&gt;RET_OR_REINV_FEE*(N+1)&lt;/code&gt;, where &lt;code&gt;N&lt;/code&gt; is the number of participants, to cover the costs of stake processing.&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>makartis:seVBu4WkN</id><link rel="alternate" type="text/html" href="https://teletype.in/@makartis/seVBu4WkN?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=makartis"></link><title>Что такое TON OS</title><published>2021-02-26T10:13:51.421Z</published><updated>2021-08-22T23:17:43.797Z</updated><category term="ton" label="TON"></category><summary type="html">
Операционная система (ОС) - это системное программное обеспечение, которое управляет компьютерным оборудованием, ресурсами программного обеспечения и предоставляет общие услуги для компьютерных программ.
- из Википедии
Операционная система TON является посредником между пользователем и блокчейном - распределенной проверяемой вычислительной платформой.</summary><content type="html">
  &lt;p&gt;&lt;br /&gt;Операционная система (ОС) - это системное программное обеспечение, которое управляет компьютерным оборудованием, ресурсами программного обеспечения и предоставляет общие услуги для компьютерных программ.&lt;br /&gt;- из Википедии&lt;br /&gt;Операционная система TON является посредником между пользователем и блокчейном - распределенной проверяемой вычислительной платформой.&lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Почему мы называем это TON OS?&lt;/strong&gt;&lt;br /&gt;Современный блокчейн, такой как Free TON, - это не просто неизменный реестр. Биткойн и другие ранние блокчейны были в основном реестрами, но даже Биткойн поддерживает не полный сценарий Тьюринга, который предоставляет некоторые инструкции выполнения транзакции. Фактически, сценарий Биткойн представляет собой набор инструкций, подобный Форт, что делает его несколько похожим по происхождению на язык ассемблера виртуальной машины TON, но об этом позже.&lt;/p&gt;
  &lt;p&gt;Большинство блокчейнов после Ethereum по большей части представляют собой распределенные вычислительные машины, которые выполняют и проверяют программы, завершенные по Тьюрингу, называемые смарт-контрактами. Проще говоря, они представляют собой особую разновидность сетевых процессоров, работающих в оркестровке (так называемый «консенсус») для выполнения общих операций и, таким образом, проверки правильности их выполнения.&lt;/p&gt;
  &lt;p&gt;В TON эта парадигма доведена до крайности. Неизменяемый реестр - это небольшая часть TON. Конечно, это неизменный реестр и цепочка блоков - именно так данные записываются и передаются от одного сетевого процессора к другому - но есть по крайней мере два аспекта, которые делают TON уникальным вычислительным механизмом, а не простым реестром.&lt;/p&gt;
  &lt;p&gt;Практически все в TON - это смарт-контракты. Каждая учетная запись в TON должна быть связана с кодом смарт-контракта (или инициализирована), чтобы пользователь мог выполнять с ней любые операции. Смарт-контракты - это программы сборки TON, выполняемые на виртуальной машине TON, во многом так же, как любой код сборки выполняется аппаратно или виртуальным процессором на обычном компьютере.&lt;/p&gt;
  &lt;p&gt;Между обычным компьютером и пользователем (который может быть разработчиком, который хотел бы писать программы для этого компьютера или обычным пользователем, который хотел бы запускать эти программы и взаимодействовать с ними) существует нечто, называемое операционной системой.&lt;/p&gt;
  &lt;p&gt;Вот как GNU определяет операционную систему:&lt;/p&gt;
  &lt;p&gt;Linux - это операционная система: серия программ, которые позволяют вам взаимодействовать с вашим компьютером и запускать другие программы.&lt;br /&gt;Операционная система состоит из различных основных программ, которые необходимы вашему компьютеру, чтобы он мог общаться и получать инструкции от пользователей; читать и записывать данные на жесткие диски, ленты и принтеры; контролировать использование памяти; и запустить другое программное обеспечение.&lt;br /&gt;Совершенно очевидно, зачем компьютеру нужна операционная система. До появления операционных систем взаимодействие с компьютерами выглядело примерно так:&lt;/p&gt;
  &lt;blockquote&gt;Я до сих пор считаю «мировой компьютер» хорошей аналогией. Идея о том, что у вас есть общая вычислительная среда, в которой любой может создавать и запускать материалы, по-прежнему является вполне законной и ценной вещью, которую следует подчеркнуть.&lt;br /&gt;- Виталик Бутерин&lt;br /&gt;Как ни крути, блокчейн вполне может называться децентрализованным компьютером. По крайней мере, некоторые из блокчейнов. TON определенно есть.&lt;/blockquote&gt;
  &lt;p&gt;И, как и в случае с любым компьютером, блокчейну нужен промежуточный уровень (или уровни), который управляет его ресурсами и предоставляет услуги программам, которые пользователь запускает или с которыми взаимодействует. Конечно, с точки зрения архитектуры, блокчейн нельзя напрямую сравнивать 1: 1 с обычным ПК. Но с логической точки зрения, всякий раз, когда мы думаем о программном стеке, необходимом для взаимодействия с пользователем, называть его операционной системой весьма убедительно.&lt;/p&gt;
  &lt;p&gt;Приведем несколько аргументов. Из соображений практичности мы не будем говорить только о блокчейне Free TON, но большинство аргументов можно применить и к некоторым другим современным блокчейнам.&lt;/p&gt;
  &lt;p&gt;Ожидается, что классическая операционная система обеспечит:&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Управление памятью&lt;br /&gt;Управление процессором&lt;br /&gt;Управление устройством&lt;br /&gt;Обработка файлов&lt;br /&gt;Обеспечение безопасности&lt;br /&gt;Контроль производительности системы&lt;br /&gt;Учет и обработка работ&lt;br /&gt;Обнаружение и обработка ошибок&lt;br /&gt;Синхронизация с другим ПО и пользователями&lt;/strong&gt;&lt;br /&gt;Сравним с TON OS и предоставляемыми ею услугами:&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Управление памятью&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Отдельные блоки, содержащие данные, создаются, проверяются и завершаются под управлением консенсусного программного обеспечения блокчейна. Узлы, участвующие в блоках обработки, выбираются динамически, без вмешательства пользователя блокчейна.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Управление процессором&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Смарт-контракты - это программы блокчейна, которые выполняются виртуальной машиной TON на многих сетевых устройствах и локально (если учесть, как пользователь получает доступ к блокчейну). Пользователь не думает о том, как выполняется смарт-контракт. Следуя некоторым инструкциям по развертыванию, разработчик может развертывать и запускать смарт-контракты, не задумываясь о том, на какой виртуальной машине он выполняется или как это выполнение было синхронизировано по сети и проверено. В этом отношении можно с уверенностью сказать, что TON OS предоставляет возможности управления процессором.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Управление устройством&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Программное обеспечение блокчейна, включая реализацию полного узла, позволяет пользователям контролировать, обрабатывать, настраивать и диагностировать отдельные узлы блокчейна.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Файл handliнг&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;С помощью смарт-контракта пользователи могут хранить и получать доступ к постоянным данным в цепочке блоков.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Обеспечение безопасности&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Доступ к закрытым областям системы разрешен за счет широкого использования специализированных смарт-контрактов. Случаи попыток несанкционированного доступа фиксируются и отслеживаются с помощью смарт-контрактов безопасности.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Контроль производительности системы&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Общесистемные смарт-контракты, развернутые в блокчейне, отвечают за мониторинг производительности системы и получение событий, которые выявляют различные случаи неисправности системы.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Учет и обработка работ&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Выполнение смарт-контрактов внутри блокчейна регулируется специализированными программными модулями. Подробная информация о выполнении доступна для просмотра и анализа через проводник блокчейна.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Обнаружение и обработка ошибок&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Случаи ненадлежащего поведения и несоответствия смарт-контрактов и программного обеспечения блокчейн отслеживаются, собираются и сохраняются для последующего анализа с помощью специализированных смарт-контрактов.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Синхронизация с другим ПО и пользователями&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Системные смарт-контракты образуют взаимосвязанную децентрализованную сеть, обмениваясь адресами, интерфейсами и спецификациями друг с другом, чтобы предоставить пользователям и другим смарт-контрактам информацию, необходимую для правильного использования их функций.&lt;/p&gt;

</content></entry><entry><id>makartis:4tJOYiihB</id><link rel="alternate" type="text/html" href="https://teletype.in/@makartis/4tJOYiihB?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=makartis"></link><title>Самоорганизующаяся демократия</title><published>2021-02-18T23:26:31.024Z</published><updated>2021-02-18T23:26:31.024Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/13/4c/134cd22a-7fd7-43cf-a48c-be574f711165.jpeg"></media:thumbnail><summary type="html">&lt;img src=&quot;https://s.dou.ua/img/announces/ww.jpg&quot;&gt;Действующие виды демократии уже изжили себя, показав свои недостатки и уязвимости. Многие приверженцы этого тезиса обращают свой взгляд «в прошлое» — к прямой демократии, и обосновывают это тем, что каждый гражданин может принять участие в государственных политических процессах с помощью интернета.</summary><content type="html">
  &lt;h1&gt;Самоорганизующаяся демократия&lt;/h1&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://s.dou.ua/img/announces/ww.jpg&quot; width=&quot;920&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Действующие виды демократии уже изжили себя, показав свои недостатки и уязвимости. Многие приверженцы этого тезиса обращают свой взгляд «в прошлое» — к прямой демократии, и обосновывают это тем, что каждый гражданин может принять участие в государственных политических процессах с помощью интернета.&lt;/p&gt;
  &lt;p&gt;Я считаю, это далеко не самый перспективный путь развития общества, так как существуют более прогрессивные модели управления. Современные исследования и разработки в области IT наглядно показывают колоссальный потенциал децентрализованных (aka, peer2peer) и/или &lt;a href=&quot;http://en.wikipedia.org/wiki/Self-organization&quot; target=&quot;_blank&quot;&gt;самоорганизующихся&lt;/a&gt; систем: от нейронных сетей &lt;a href=&quot;http://habrahabr.ru/post/192978/&quot; target=&quot;_blank&quot;&gt;SOINN&lt;/a&gt; до всем известной нашумевшей p2p криптовалюты bitcoin.&lt;/p&gt;
  &lt;p&gt;Централизованные и децентрализованные (&lt;a href=&quot;http://twister.net.co/&quot; target=&quot;_blank&quot;&gt;Twister&lt;/a&gt; и т.п.) социальные сети демонстрируют самоорганизованное формирирование топологии, которая способствует быстрому распространению информации.&lt;/p&gt;
  &lt;h2&gt;От прямой/представительной демократии к самоорганизующемуся государству&lt;/h2&gt;
  &lt;p&gt;Проведем краткий сравнительный анализ двух альтернативных типов демократий, на основе которого можно будет выбрать новый вектор развития демократического общества.&lt;/p&gt;
  &lt;h3&gt;Прямая демократия:&lt;/h3&gt;
  &lt;p&gt;&lt;strong&gt;Преимущества&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Недостатки&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;1. Каждый может принимать участие в принятии политических решений.&lt;/p&gt;
  &lt;p&gt;1. Равенство в правах не означает равенства в компетенции по отдельным вопросам, не брать в расчет уровень интеллектуального развития (репутации в обществе), см. &lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D0%BE%D0%BA%D1%80%D0%B0%D1%82%D0%B8%D1%8F&quot; target=&quot;_blank&quot;&gt;ноократия&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;2. Каждый имеет право влиять на принятие решений, но не каждый сможет/захочет им воспользоваться (нехватка времени, отсутствие мотивации).&lt;/p&gt;
  &lt;h3&gt;Представительная демократия:&lt;/h3&gt;
  &lt;p&gt;&lt;strong&gt;Преимущества&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Недостатки&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;1. Каждый гражданин не обязан тратить время на управление государством.&lt;/p&gt;
  &lt;p&gt;1. Народ не принимает непосредственного участия в процессе принятия решений.&lt;/p&gt;
  &lt;p&gt;2. Механизм коммуникации между представителями упрощен.&lt;/p&gt;
  &lt;p&gt;2. Система уязвима для недобросовестных представителей из-за длительности сроков их полномочий.&lt;/p&gt;
  &lt;p&gt;3. Риск узурпации власти господствующим политическим кланом.&lt;/p&gt;
  &lt;p&gt;4. Большинство граждан не имеют возможности принимать участие в политической борьбе.&lt;/p&gt;
  &lt;p&gt;Обе системы обладают недостатками, причина которых — отсутствие элемента самоорганизации в каждой из них. Среди всех альтернативных типов демократий примечательна так называемая &lt;a href=&quot;http://en.wikipedia.org/wiki/Delegative_democracy&quot; target=&quot;_blank&quot;&gt;делегируемая демократия&lt;/a&gt;. Она сочетает в себе все преимущества прямой и представительной демократий и при этом обладает возможностью самоорганизации ее участников.&lt;/p&gt;
  &lt;p&gt;В основу этой системы положен принцип &lt;a href=&quot;http://en.wikipedia.org/wiki/Proxy_voting#Delegated_voting&quot; target=&quot;_blank&quot;&gt;делегируемого голосования&lt;/a&gt;: обладающий правом голоса участник может голосовать непосредственно напрямую или же (по желанию) делегировать свое право проголосовать за него другому лицу — &lt;strong&gt;делегату&lt;/strong&gt;. Это делегирование транзитивно — делегат тоже может &lt;strong&gt;ределегировать&lt;/strong&gt; свой и делегированные ему голоса другому лицу. Схематически это выглядит так:&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://s.dou.ua/uploads/aleksandr-zhukov-2/517px-dynamischewahlinb-ndnissen.c4a8a0336b817ee2772577f3d9ac94e1018265ec.png&quot; width=&quot;517&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;При этом система полностью динамична, так как каждый обладатель голоса в любой момент может возвратить назад свое «отделегированное» право. Более того, принятие решений происходит в разных категориях, и каждый участник может по-разному делегировать свои голоса в каждой из них.&lt;/p&gt;
  &lt;h2&gt;Самоорганизация в делегируемой демократии&lt;/h2&gt;
  &lt;p&gt;Динамическая топология такой системы позволяет переходить от более централизованной системы к полностью децентрализованной и обратно. Например, во время военного положения общество нуждается в лидерах и быстром принятии решений. В таком случае участники могут самоорганизоваться следующим образом:&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://s.dou.ua/uploads/aleksandr-zhukov-2/centelized-1-.7e39fccd4597462686340fa1c3b1439ead2cd366.jpg&quot; width=&quot;401&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Один общепризнанный делегат становится лидером и берет на себя ответственность за принятие жизненно важных для общества решений. Когда государство возвращается к стабильному состоянию, топология системы вновь смещается в сторону прямой демократии (коллективного принятия решений):&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://s.dou.ua/uploads/aleksandr-zhukov-2/direct.075ae642c7bee458967f63fa1a1ed7eea2f9a329.jpg&quot; width=&quot;401&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;strong&gt;На практике&lt;/strong&gt; делегируемую демократию сегодня используют Пиратские партии нескольких стран Европы. В частности, &lt;a href=&quot;http://berlin.piratenpartei.de/2010/01/03/pressemitteilung-piratenpartei-revolutioniert-parteiinternen-diskurs-interaktive-demokratie-mit-liquid-feedback/&quot; target=&quot;_blank&quot;&gt;Пиратская партия Германии&lt;/a&gt; пользуется специально разработанной платформой &lt;a href=&quot;http://en.wikipedia.org/wiki/LiquidFeedback&quot; target=&quot;_blank&quot;&gt;LiquidFeedback&lt;/a&gt; для реализации механизма самоорганизации.&lt;/p&gt;
  &lt;h2&gt;Заключение&lt;/h2&gt;
  &lt;p&gt;В данной статье я привел один из вариантов реализации самоорганизующегося общества. Естественно, что выбор не ограничен только делегируемой демократией. Но главным критерием в построении идеального общества я считаю наличие элемента самоорганизации.&lt;/p&gt;
  &lt;p&gt;Ресурсы:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Delegative_democracy&quot; target=&quot;_blank&quot;&gt;Delegative democracy&lt;/a&gt;;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=fg0_Vhldz-8&quot; target=&quot;_blank&quot;&gt;Liquid Democracy In Simple Terms&lt;/a&gt;.&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>makartis:brainstorm</id><link rel="alternate" type="text/html" href="https://teletype.in/@makartis/brainstorm?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=makartis"></link><title>Лучшие техники и методологии мозгового штурма.</title><published>2021-02-17T21:24:38.905Z</published><updated>2021-02-17T21:25:55.711Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/72/10/7210fe48-f088-421f-aa2a-39633cea3658.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://ux.pub/wp-content/uploads/2019/05/pervaya-1160x680.png&quot;&gt;10 МИН ЧИТАТЬ</summary><content type="html">
  &lt;p&gt;10 МИН ЧИТАТЬ&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://ux.pub/wp-content/uploads/2019/05/pervaya-1160x680.png&quot; width=&quot;1160&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Какую картину вам рисует ваше воображение, когда вы слышите термин “брейншторм”? Возможно, вам представляется толпа людей, перекрикивающих друг друга, атакующих вайтборд, и пытающихся завладеть проектором? К счастью, это может выглядеть иначе. В учебниках по креативности брейншторм определяется как цивилизованный процесс совместной генерации идей. Так как же сделать этот процесс цивилизованным? Существует несколько методологий, три из которых мы с коллегами совместно опробовали.&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Шесть Шляп Мышления&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Креативная Стратегия Уолта Диснея&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;SCAMPER&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Я надеюсь, что прочитав это статью, вы сможете организовать сессию мозгового штурма с вашими коллегами или клиентами, и совместно прийти к каким-то значимым результатам. Например, придумать новое мобильное приложение или разработать план конференции.&lt;/p&gt;
  &lt;p&gt;Не удивляйтесь, что все методики брейнсторминга имеют много общего. Техники могут различаться, но сущность процесса одна и та же – участники рассматривают проблему с разных точек зрения и выдвигают свои решения. Все идеи записываются, а затем сортируются по приоритетам. Звучит предельно просто, но при этом необходимо соблюдать три ключевых принципа.&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;Чем больше тем лучше&lt;/strong&gt; или количество важнее качества Чем больше идей выдвинет ваша команда, тем шире пространство вариантов. Совершенно нормально, если двое или трое участников повторят одно и то же. И это нормально, если некоторые идеи кажутся нелепыми или смешными. Задача фасилитатора – помочь участникам высказать оригинальные, но скрытые глубоко в мозгу идеи.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Никакой критики.&lt;/strong&gt; Mозговой Штурм призван создать пул идей. Должны приветствоваться любые высказывания, вне зависимости от субординации и экспертных мнений. Босс не может заставить замолчать подчиненного, аналитик не может смеяться над нереалистичным видением своего товарища по команде, а дизайнер не должен подвергать соображения своего коллеги тесту на юзабилити.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Следуйте плану. &lt;/strong&gt;Брейншторм будет продуктивным, только если он нацелен на результат, и имеет жесткие временные рамки. Неконтролируемые вспышки креативности, как правило, проваливаются. Чтобы чудо произошло, необходимо организовать для него хорошие условия&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p&gt;Вот Вам слайды, в качестве инструкции:&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://ux.pub/wp-content/uploads/2019/05/vtoroavya.png&quot; width=&quot;1900&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Теперь когда мы разобрались с основными принципами, пришло время определиться с составом участников. Пригласите как можно больше экспертов из разных областей, включая предпринимателей, аналитиков, маркетологов, инженеров, специалистов по продажам, потенциальных или реальных пользователей. Причем все они должны иметь отношение к обсуждаемому предмету и заинтересованы в нем. В противном случае, они будут вынуждены фантазировать о вещах, с которыми они никогда не имели дело.&lt;/p&gt;
  &lt;h4&gt;Метод 1 – Шесть Шляп Мышления&lt;/h4&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://ux.pub/wp-content/uploads/2019/05/333333.png&quot; width=&quot;1900&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Метод был создан в 1985 году мальтийским психологом Эдвардом де Бонo.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Уровень сложности&lt;/strong&gt; – нормальный&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Предмет обсуждения&lt;/strong&gt; – процесс, услуга, продукт, новая функция, – что угодно.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Длительность&lt;/strong&gt; 1 – 1,5 часа&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Организация&lt;/strong&gt; – 1 фасилитатор на группу из 5-8 человек. Если присутствует большее количество людей, то будет лучше разделить их на небольшие группы и привлечь ассистентов. Например, нашу команду из 20 дизайнеров мы обычно делим на 3 группы, которые одновременно работают над проблемой.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Материалы&lt;/strong&gt;&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Слайды с пошаговыми инструкциями&lt;/li&gt;
    &lt;li&gt;Таймер (или ноутбук с таймером, развернутым во весь экран)&lt;/li&gt;
    &lt;li&gt;6 цветных колпачков для каждого участника, или то, что может их символизировать. Мы, например, использовали бумажные короны. Все они должны быть разных цветов – синего, желтого, зеленого, белого, красного и черного.&lt;/li&gt;
    &lt;li&gt;Стикеры для заметок любых 6 цветов (1-2 пачки каждого цвета будет достаточно)&lt;/li&gt;
    &lt;li&gt;Вайтборд или большой лист бумаги на стене или на столе&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;strong&gt;Процесс&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Сессия начинается с 5-минутного вступления, которое должно дать участникам предварительное представление о том, что они будут делать, к какому результату они должны прийти, и почему этот процесс так важен. Перед тем, как перейти к следующему шагу, необходимо убедиться, что участники полностью понимают концепцию Шести Шляп Мышления. Она построена на том, что люди привыкают воспринимать реальность с одной и той же точки зрения, другими словами – “носят одну и ту же шляпу”. А это блокирует креативность и порождает стереотипы. Для того, чтобы люди начали мыслить по другому, достаточно просто “примерить другую шляпу”.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Ниже вы найдете пояснения что значит каждая из шляп. &lt;/strong&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://ux.pub/wp-content/uploads/2019/05/shlyary.png&quot; width=&quot;1900&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Белая Шляпа:&lt;/em&gt; факты, непредвзятость, объективность&lt;/p&gt;
  &lt;p&gt;&lt;em&gt;Желтая Шляпа:&lt;/em&gt; оптимизм, преимущества, возможности реализации&lt;/p&gt;
  &lt;p&gt;&lt;em&gt;Черная Шляпа&lt;/em&gt;: критика, осторожность, оценка рисков&lt;/p&gt;
  &lt;p&gt;&lt;em&gt;Красная Шляпа:&lt;/em&gt; интуиция, чувства, эмоции&lt;/p&gt;
  &lt;p&gt;&lt;em&gt;Зеленая Шляпа:&lt;/em&gt; инновация, креативность, новые идеи&lt;/p&gt;
  &lt;p&gt;&lt;em&gt;Синяя Шляпа:&lt;/em&gt; контроль, общая схема, организация.&lt;/p&gt;
  &lt;p&gt;Синяя шляпа играет особую, службеную роль, и олицетворяет собой процесс брейнсторминга как таковой. Она начинает сессию, и заканчивает её.&lt;/p&gt;
  &lt;p&gt;Остальные шляпы символизируют различные способы интерпретации реальности. Красная, например, представляет интуитивное, эмоциональное восприятие. Черная, в свою очередь, заставляет участников включить внутреннего “проект-менеджера”, и взглянуть на проблему с позиций расписания, бюджета, стоимости и прибыли.&lt;/p&gt;
  &lt;p&gt;Очередность вступления каждой из шляп в процесс брейншторма может отличаться в зависимости от ваших целей. В оптимальном случае, вы должны “примерить” все шляпы и пройти через следующие этапы:&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;Синяя – подготовка&lt;/li&gt;
    &lt;li&gt;Белая – обзор доступной и недостающей информации&lt;/li&gt;
    &lt;li&gt;Красная – выслушивание эмоциональных суждений и непроверенных предположений&lt;/li&gt;
    &lt;li&gt;Желтая – выявление уже имеющихся положительных моментов&lt;/li&gt;
    &lt;li&gt;Зеленая – обдумывание возможных улучшений и инноваций&lt;/li&gt;
    &lt;li&gt;Черная – анализ рисков и ресурсов&lt;/li&gt;
    &lt;li&gt;Синяя – подведение итогов&lt;/li&gt;
  &lt;/ol&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://ux.pub/wp-content/uploads/2019/05/12112112.png&quot; width=&quot;1900&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Как это происходит? Когда участники видят слайд с изображением шляпы определенного цвета, они записывают свои идеи на стикерах соответствующего цвета, и приклеивают их на вайтборд. Допустим, на экране Желтая шляпа. Это значит, все участники записывают на желтых стикерах свои соображения обо всех преимуществах и замечательных особенностях обсуждаемого предмета, а также о том, почему он может быть привлекателен или полезен. После этого все стикеры одинакового цвета размещаются рядом в отдельные секции на вайтборде.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://ux.pub/wp-content/uploads/2019/05/111111.png&quot; width=&quot;1900&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Этот заключительный этап брейншторма мы дополняем еще и сортировкой идей по тематическому сходству/близости. Хотя она и не предусмотрена оригинальной методикой, но позволяет суммировать идеи, и приблизить момент их воплощения. Команда должна найти на вайтборде записи о сходных вещах, объединить их в группы, и присвоить каждой группе название. Например, во время обсуждения темы ”Улучшение инфраструктуры дизайнерского отдела”, мои коллеги создали такие группы как “Эргономика стульев”, “Полы и стены”, “Обновление программного обеспечения”.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://ux.pub/wp-content/uploads/2019/05/22222.png&quot; width=&quot;1900&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Мы завершаем сессию мозгового штурма мини-презентацией. Представитель каждой группы перечисляет список идей, сформированных по группам, и делится наиболее интересными и впечатляющими наблюдениями.&lt;/p&gt;
  &lt;h4&gt;&lt;strong&gt;Метод 2 – Креативная Стратегия Уолта Диснея&lt;/strong&gt;&lt;/h4&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://ux.pub/wp-content/uploads/2019/05/43433434-1.png&quot; width=&quot;1900&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Креативный метод Уолта Диснея был разработан Робертом Дилтсом, экспертом по нейро-лингвистическому программированию, в 1994 году.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Уровень сложности&lt;/strong&gt; – легкий&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Предмет обсуждения&lt;/strong&gt; – все что угодно, особенно проекты, которые долго откладывались на потом, или мечты, которые по неизвестным причинам не были осуществлены.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Длительность&lt;/strong&gt; – 1 час&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Организация&lt;/strong&gt; – 1 фасилитатор на группу из 5-8 человек. Когда мы устраиваем практические семинары по брейнстормингу, я и мои коллеги работаем с 4 группами по 6 человек.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Материалы&lt;/strong&gt;&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Слайды с пошаговыми инструкциями&lt;/li&gt;
    &lt;li&gt;Таймер (или ноутбук с таймером, развернутым во весь экран)&lt;/li&gt;
    &lt;li&gt;Желтые стикеры для заметок стандартного размера (1-2 пачки на группу из 5-8 человек)&lt;/li&gt;
    &lt;li&gt;Красные стикеры маленького размера (1-2 пачки на команду)&lt;/li&gt;
    &lt;li&gt;Флажки для голосования&lt;/li&gt;
    &lt;li&gt;Вайтборд или большой лист бумаги на стене или на столе&lt;/li&gt;
    &lt;li&gt;Черные маркеры для каждого участника&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Эта техника была названа в Честь Уолта Диснея – знаменитого мультипликатора и продюсера. Сам Дисней не использовал никакой методологии, его креативный процесс был интуитивным, но тем не менее продуктивным.&lt;/p&gt;
  &lt;p&gt;Роберт Дилтс, эксперт по НЛП, создал свое ноу-хау гораздо позже, базируясь на воспоминаниях коллег Уолта Диснея. Стратегия Диснея основана на строгом разделении трех ролей – Мечтатель, Реалист, и Критик. Когда люди думают о будущем, они часто смешивают эти три роли. Именно поэтому они терпят поражение. Ведь как мечтают обычные люди? “Давайте сделаем это. Но это так дорого. И рискованно… Возможно, позже”. В результате, прекрасная идея гибнет под гнетом страхов и сомнений.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://ux.pub/wp-content/uploads/2019/05/56655656.png&quot; width=&quot;1900&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;В этой разновидности мозгового штурма задача фасилитатора не позволить участникам смешивать три обозначенные роли, и не давать им задушить идею в зародыше. Во время вступительной части фасилитатор помогает команде с определением каждой роли. Это достигается при помощи открытых вопросов и слайдов.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://ux.pub/wp-content/uploads/2019/05/77777.png&quot; width=&quot;1900&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;strong&gt;Мечтатель:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Генерирует множество идей;&lt;/li&gt;
    &lt;li&gt;Свободен в своем воображении и может высказывать что угодно;&lt;/li&gt;
    &lt;li&gt;Не думает о препятствиях.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;strong&gt;Реалист:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Находит пути воплощения идей в реальность;&lt;/li&gt;
    &lt;li&gt;Изыскивает решения;&lt;/li&gt;
    &lt;li&gt;Думает, применяя практичность и логику.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;strong&gt;Критик:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Анализирует возможные риски;&lt;/li&gt;
    &lt;li&gt;Находит слабые места;&lt;/li&gt;
    &lt;li&gt;Хочет предотвратить поражение.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Вот это, например, мое представление первой роли. “Мечтатель не связан ограничениями и правилами реального мира. Мечтатель генерирует так много идей, как только возможно, и не думает о препятствиях на пути их воплощения. Он воображает наиболее интересный, легкий и простой путь решения проблемы. Мечтатель не думает ни о критике, ни о планировании, ни о рациональности”. Примеряя на себя эту роль, участники должны прийти к целому облаку идей.&lt;/p&gt;
  &lt;p&gt;Перед тем как участники перейдут к следующей роли, следует объяснить им, что она означает. “Реалист – лучший друг Мечтателя. Реалист это менеджер, который способен превратить неопределенную идею в пошаговый план действий, и найти для этого определенные ресурсы. Реалист понятия не имеет, что такое критика. Он пытается найти любые возможности для осуществления идей Мечтателя, определяя кто, когда, и как сделает эту идею реальностью.&lt;/p&gt;
  &lt;p&gt;Участники записывают возможные решения на стикерах, и размещают их в соответствующих кругах на вайтборде. Разумеется, некоторые из самых смелых идей не имеют решений, а некоторые могут быть достигнуты даже несколькими способами.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://ux.pub/wp-content/uploads/2019/05/1_gniptouv_kxdj3axgn2atw.png&quot; width=&quot;1900&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Слайды:&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;&lt;em&gt;Мечтатель&lt;/em&gt;&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;em&gt;Генерирует и записывает идеи&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Подхватывает идеи своих коллег&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Создает облако идей&lt;/em&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;em&gt;Реалист&lt;/em&gt;&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;em&gt;Как мы можем сделать эту мечту реальностью?&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Кто может тебе помочь?&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Как другие люди воплощают подобные идеи?&lt;/em&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;em&gt;Критик&lt;/em&gt;&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;em&gt;В чем слабые места этого решения?&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Кто или что может помешать?&lt;/em&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Роль Критика наиболее трудная для понимания, так как многие думают, что Критик это тот парень, который втаптывает в грязь работу Мечтателя и Реалиста. К счастью, это не так. “Критик это лучший друг Мечтателя и Реалиста. Этот человек анализирует риски и заботится о безопасности предложенного решения. Критик не трогает изначальную идею, а работает только с решениями. Задача Критика помочь и заранее предвидеть вероятные сложности”.&lt;/p&gt;
  &lt;p&gt;После этого объяснения участники записывают возможные риски на красных спикерах. Некоторые из решений имеют несколько рисков, некоторые могут не иметь их вовсе.&lt;/p&gt;
  &lt;p&gt;Следующий этап – это голосование. Каждый участник голосует за идеи, которые по его мнению, стоят дальнейшей разработки. Каждый принимает решение, основываясь на ценности идеи, доступности решения, и серьезности рисков.&lt;/p&gt;
  &lt;p&gt;Идеи, не имеющие решений, не могут быть поставлены на голосование, так как они не имеют связи с реальностью. В моей практике, каждый участник имел для голосования три флажка, которые он мог распределить между тремя разными идеями, или проголосовать всеми тремя за одну.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://ux.pub/wp-content/uploads/2019/05/32323232.png&quot; width=&quot;1900&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Слайды:&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Голосование&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;em&gt;Подумайте о лучшей идее и решении&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Выберите самую многообещающую идею&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Проголосуйте за лучшую идею&lt;/em&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;strong&gt;&lt;em&gt; Поделитесь ключевыми выводами&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;&lt;em&gt;Какая идея самая многообещающая?&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;&lt;em&gt;С чего вы начнете?&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;Финальный этап процесса это роудмэппинг. Команда берет идеи, которая собрали наибольшее количество голосов (обычно, 6-10), и распределяют их на временной шкале в зависимости от сложности воплощения. Если идею можно легко реализовать, она ставится в колонке “Сейчас”. Если идея требует серьезной подготовки и благоприятных условий, на шкале она отодвигается дальше.&lt;/p&gt;
  &lt;p&gt;И конечно же, должно найтись время для подведения итогов мозгового штурма. Команды представляют таймлайны вместе с коротким списком идей, и кратко говорят о тенденциях, которые были выявлены в процессе брейнсторминга.&lt;/p&gt;
  &lt;h2&gt;Метод 3 – SCAMPER&lt;/h2&gt;
  &lt;p&gt;Этот метод был предложен в 1953 году Алексом Осборном, основателем и руководителем международной сети рекламных агенств BBDO.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Уровень сложности&lt;/strong&gt; – от нормального до трудного&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Предмет обсуждения&lt;/strong&gt; – в идеале, технические вопросы или материальные предметы, хотя автор и евангелист этого метода уверяет, что он может быть применим и к любым другим областям. По моему мнению, SCAMPER менее эффективен, когда он касается абстрактных понятий. Например, работая по этому методу, команда с трудом справилась с темой “Улучшение взаимодействия между дизайнером и клиентом”, зато он блестяще сработал в случае с темой “Изобретение лучшего приложения для прототайпинга”.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Длительность&lt;/strong&gt; – не более 2 часов.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Организация&lt;/strong&gt; – 1 фасилитатор на группу из 5-8 человек.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Материалы&lt;/strong&gt;&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Слайды с пошаговыми инструкциями&lt;/li&gt;
    &lt;li&gt;Таймер (или ноутбук с таймером, развернутым во весь экран)&lt;/li&gt;
    &lt;li&gt;Стандартные стикеры для заметок (7 упаковок на группу из 5-8 человек)&lt;/li&gt;
    &lt;li&gt;Вайтборд или большой лист бумаги на стене или на столе&lt;/li&gt;
    &lt;li&gt;Черные маркеры для каждого участника&lt;/li&gt;
    &lt;li&gt;Дополнительно, Thinkpack – специальные карточки, разработанные Майклом Михалко (1 комплект на команду)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;strong&gt;Процесс&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Техника SCAMPER задействует различные варианты модификации объекта. Метод призван произвести инвентаризацию идей и помочь оптимизировать существующий продукт, или создать принципиально новый.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://ux.pub/wp-content/uploads/2019/05/1_iv817z902ygkenlaefafja.png&quot; width=&quot;1900&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;SCAMPER это аббревиатура, где каждая из букв представляет одну из трансформаций, которую возможно применить по отношению к предмету.&lt;/p&gt;
  &lt;p&gt;S – Substitute (заменить)&lt;/p&gt;
  &lt;p&gt;C – Combine (комбинировать)&lt;/p&gt;
  &lt;p&gt;A – Adopt (адаптировать)&lt;/p&gt;
  &lt;p&gt;M – Modify (модифицировать)&lt;/p&gt;
  &lt;p&gt;P – Put to other uses (предложить другое применение)&lt;/p&gt;
  &lt;p&gt;E – Eliminate (устранить)&lt;/p&gt;
  &lt;p&gt;R – Rearrange or reverse (реорганизовать)&lt;/p&gt;
  &lt;p&gt;В данном случае обязательно нужно проиллюстрировать каждую позицию примерами, и предложить участникам для начала потренироваться. Мы объясняем этот метод на простых объектах, таких как ординарная шариковая ручка. Как можно её усовершенствовать?&lt;/p&gt;
  &lt;p&gt;S – Заменить чернила на что нибудь, что можно стереть.&lt;/p&gt;
  &lt;p&gt;C – Скомбинировать корпус ручки и стержень в единое целое.&lt;/p&gt;
  &lt;p&gt;A – Адаптировать, например, нож, чтобы писать по дереву.&lt;/p&gt;
  &lt;p&gt;M – Модифицировать корпус, сделав его гибким, чтобы носить как браслет.&lt;/p&gt;
  &lt;p&gt;P – Использовать ручку, как дротик для дартса.&lt;/p&gt;
  &lt;p&gt;E – Устранить зажим и сделать вместо этого магнит.&lt;/p&gt;
  &lt;p&gt;R – Поменять расположение зажима. В результате, стержень будет ориентирован вверх и чернила не прольются в карман.&lt;/p&gt;
  &lt;p&gt;Если у аудитории нет вопросов, и процедура всем понятна, вы можете начинать брейншторм. Прежде всего, нужно прийти к соглашению, что является объектом мозгового штурма, и записать это на вайтборде. Затем, как только на экране появляется каждая из букв, участники генерируют и записывают свои идеи, предлагая проделать с объектом одну из вероятных трансформаций. Слайды в это время напоминают , что каждая из букв означает. Таймер устанавливается на определенное время, что не позволяет участникам углубиться в дискуссию.&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://ux.pub/wp-content/uploads/2019/05/22232332.png&quot; width=&quot;1900&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Последний этап процесса – сортировка по тематическому сходству/близости. Это заставляет команду начать имплементацию. Как правило, люди склонны быстро забывать те важные заключения, к которым они пришли в результате брейнсторминга, и быстро возвращаются к уже существующему положению вещей. Просто представьте, как жаль будет просто выбросить в топку результаты двухчасовой сессии.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Thinkpak cards&lt;/strong&gt; – это комплект карт для брейнсторминга, разработанный Mайклом Михалко. Эти карточки оживляют процесс мозгового штурма, и привносят в него элемент игры. Каждая карточка символизирует одну из букв аббревиатуры&lt;/p&gt;
  &lt;p&gt;SCAMPER. Каждый участник по очереди вытягивает карту из колоды, и делает свой ход, выступая с корреспондирующей идеей. Будет довольно весело посоревноваться в количестве идей, выданных каждым участником за короткий промежуток времени, обычно 3-5 минут. Если ваша команда никогда ранее не участвовала в мозговом штурме, Thinkpak cards это прекрасный способ сначала поиграть и потренироваться, а потом перейти к серьезным делам.&lt;/p&gt;
  &lt;h4&gt;&lt;strong&gt;Какие уроки можно извлечь&lt;/strong&gt;&lt;/h4&gt;
  &lt;p&gt;&lt;strong&gt;Практикуйтесь &lt;/strong&gt; Люди поначалу могут быть разочарованы результатами брейнсторминга. Некоторые вообще могут иметь предубеждение против креативного процесса, считая это пустой тратой времени, и чем то, научно не доказанным. Наша дизайнерской команда перепробовала все перечисленные методики, и они дают хорошие результаты. Более того, наша уверенность помогает другим людям поверить в эффективность брейнсторминга.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Адекватность темы и аудитории&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Брейнсторминг может провалиться, если вы привлечете людей, не имеющих релевантного опыта, или желания изменить что то в существующем порядке вещей. Когда я однажды попросил команду начинающих дизайнеров подумать на тему улучшения процесса продажи дизайнерских услуг клиентам, из этого ничего не вышло, так как у них просто не было соответствующего опыта. К счастью, это была просто тренировочная сессия, и мы просто поменяли тематику.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Документируйте&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Сессия брейнсторминга закончена. Участники идут домой или возвращаются на свои рабочие места. Почти наверняка на следующее утро они ничего не вспомнят. Поэтому так важно сделать заключительный документ с итогами брейнсторминга, с фотографиями и изображениями. Чем быстрее вы его сделаете и распространите, тем скорее ваши идеи станут реальностью.&lt;/p&gt;

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