Где мы сегодня и куда мы идем завтра
Сегодня мы рады выпустить вторую бета-версию MultiChain 1.0 для Linux, Windows и Mac (сейчас версия для Mac требует компиляции). На этом завершается запланированная разработка MultiChain 1.0 - за исключением любых исправлений ошибок, финальная версия MultiChain 1.0 за лето останется неизменной.
В этом месяце также исполняется два года с момента первого альфа-релиза MultiChain в июне 2015 года. Как и в случае с любым новым продуктом, мы не были уверены, как отреагирует рынок, и знали, что существует только один способ выяснить это - выпустить минимально жизнеспособный продукт, имея в виду первоначальную версию, которая обеспечивает значительную ценность, но является предварительной по замыслу. К счастью, в отличие от нашего первого продукта МонетаSparkMultiChain получила сильный и немедленный положительный ответ. Это сопровождалось цунами разумных запросов функций, многие из которых мы сейчас реализовали. Параллельно с разработкой продукта использование также заметно выросло по всем показателям. Например, веб-сайт MultiChain в июле 3,000 года посетило менее 2015 человек, и теперь ежемесячно его количество увеличивается в десять раз.
Производительность MultiChain
За последние два года мы вложили много усилий в оптимизацию MultiChain, что было Биткойн-сердечникэталонная реализация для публичной сети биткойнов. Ниже приведено сравнение пропускной способности транзакции для установки с одним узлом с использованием пяти версий продукта:
.throughput td,.throughput th {text-align:right;}
Всего транзакций | 1.0 альфа 3 | 1.0 альфа 21 | 1.0 альфа 22 | 1.0 1 бета | 1.0 2 бета |
---|---|---|---|---|---|
100 | 6.5 т / с | 7.8 | 541.7 | 830.6 | 1465.7 |
1,000 | 7.0 | 7.6 | 583.9 | 889.4 | 1199.6 |
10,000 | 4.1 | 6.4 | 566.9 | 746.6 | 1071.2 |
100,000 | - | 6.6 | 558.0 | 771.9 | 1034.2 |
1,000,000 | - | - | 548.6 | 773.6 | 1055.4 |
Среднее число транзакций в секунду, включая накладные расходы API и создание, подписывание, анализ и проверку транзакций и блоков.
Тесты, выполненные с использованием ab
Инструмент для тестирования производительности HTTP-сервера, отправляющий два одновременных запроса sendtoaddress
API.
Спецификации сервера: Intel Core i7-4770, 4 ядра с частотой 3.4 МГц, 32 ГБ ОЗУ, Seagate 2 ТБ, 7200 об / мин, SATA, CentOS 6.4.
Естественно, самый большой скачок произошел в альфа 22, когда мы переход на управляемый базой данных кошелек. Но с тех пор мы снова почти удвоили скорость MultiChain. Мы надеемся, что продемонстрировали, что ограничение биткойнов в 4 транзакции в секунду связано с его конкретными сетевыми параметрами и не имеет отношения к блокчейнам в целом.
Конечно, оптимизация производительности - это бесконечная задача, и нет никаких причин, по которым MultiChain не может достигать 10,000 тх / сек. 16-ядерный процессор с соответствующими архитектурными изменениями. Однако, исходя из разговоров с нашими пользователями и партнерами, кажется, что немногие ожидают, что в следующие несколько лет потребуется более 1,000 тк / сек. Таким образом, мы переориентировали наши усилия по разработке на новые функции, что приятно подводит нас к теме MultiChain 2.0.
Обзор MultiChain 2.0
Версия 2.0 MultiChain будет первой, которая выйдет в двух выпусках - Community (с открытым исходным кодом) и Enterprise (коммерческий). Я собираюсь сосредоточиться здесь на бесплатной версии сообщества, так как мы обсуждаем только детали MultiChain Enterprise с наши партнеры, В любом случае выпуски Community и Enterprise будут в высшей степени совместимы, так как: (a) приложения, созданные в выпусках Community, будут работать без изменений в MultiChain Enterprise, и (b) оба выпуска будут иметь возможность подключаться и взаимодействовать друг с другом на той же цепочке.
В обеих редакциях MultiChain 2.0 будут расширены три основные области функциональности:
- Более богатая модель данных для потоков, включая документы JSON.
- Пользовательские программируемые фильтры транзакций для проверки в цепочке.
- Бесшовное обновление протокола и параметров блокчейна.
Давайте обратимся к обсуждению каждого из них в деталях.
Более богатая модель данных для потоков
MultiChain Streams были введены в сентябре 2016 года и оказались чрезвычайно популярными. Как описано в это сообщениепотоки предоставляют простую и естественную абстракцию для хранения, индексации и поиска данных общего назначения в блокчейне. Блокчейн MultiChain может содержать любое количество именованных потоков, каждый из которых может быть открыт для записи или доступен только для записи с определенных адресов.
В MultiChain 1.0 каждый элемент потока имеет одного или нескольких издателей (которые его подписывают), необязательный ключ, полезные данные двоичных данных размером до 64 МБ и метку времени (полученную из блока, в который он встроен). Каждый узел может свободно решать, на какие потоки подписаться, или может подписаться на все потоки автоматически. Если узел подписан на поток, он индексирует содержимое этого потока в режиме реального времени, обеспечивая эффективный поиск по издателю, ключу, блоку, отметке времени или позиции.
MultiChain 2.0 обогатит функциональность этих потоков несколькими способами:
- Элементы JSON, Как и двоичные данные, элементы потока будут поддерживать структурированные объекты JSON, хранящиеся в цепочке блоков в эффективном формате сериализации, таком как УБЖСОН, Поскольку MultiChain API уже использует JSON повсеместно, эти объекты JSON будут доступны для записи и чтения естественным и очевидным способом.
- Несколько ключей, Элементы потока будут поддерживать несколько ключей, что позволяет индексировать один фрагмент данных несколькими способами для извлечения с использованием
liststreamkeyitems
, Мы постоянно оцениваем, сколько функциональных возможностей базы данных следует включить в MultiChain, и не ожидаем поддержки индексирования подэлементов в элементах потока JSON в версии 2.0. Разрешение нескольких ключей на элемент потока обеспечивает разумный обходной путь. - Атомная запись нескольких элементов, MultiChain 1.0 позволяет одной транзакции записывать в несколько потоков, но не записывать несколько элементов в один поток. MultiChain 2.0 снимет это ограничение.
- JSON слияние, Любой упорядоченный список объектов JSON можно естественным образом сгладить или суммировать для создания «объединенного» объекта. Объединенный объект содержит все ключи, которые появляются в отдельных объектах, где значение, соответствующее каждому ключу, берется из последнего объекта, в котором этот ключ появляется. Если хотите, объединенный объект - это конечное состояние строки базы данных, столбцы которой определяются первым объектом и расширяются или обновляются более поздними объектами. MultiChain 2.0 добавит API для простого и быстрого извлечения объединенного объекта для элементов JSON в потоке с определенным ключом или издателем.
Эти функции получены из общих способов, которыми разработчики в настоящее время используют потоки. Другими словами, мы наблюдаем за тем, что многие люди строят поверх MultiChain на уровне приложений, и внедряем эту функциональность в сам MultiChain - шаблон, который мы намерены продолжать применять. Теперь, когда элементы потока будут включать информацию о типе, они могут быть легко расширены в будущем для поддержки других форматов данных, таких как XML, HDF5 и MIME-идентифицированное содержание. Не говоря уже о возможностях прозрачного сжатия и шифрования по цепочке.
MultiChain 2.0 будет также поддерживать объекты JSON для необработанных метаданных транзакции (т.е. не потоковых элементов), а также метаданные для событий выпуска актива и создания потока вместо текстовых пар ключ / значение, реализованных в MultiChain 1.0. listassets
API предложит объединение JSON по всем событиям выдачи актива, чтобы метаданные каждого выпуска могли эффективно обновлять окончательное описание актива.
Пользовательские фильтры транзакций
Мы много думали о том, как добавить настраиваемые программируемые правила в MultiChain. Хотя парадигма «умного контракта» Ethereum является популярной, у нее есть ряд ключевых недостатков для высокопроизводительных блокчейнов с разрешенной пропускной способностью. Во-первых, умные контракты вводят глобальную зависимость во всем состоянии блокчейна, что резко ухудшает параллелизм и производительность. Во-вторых, интеллектуальные контракты не могут помешать внедрению некорректных транзакций в блокчейн, но только предотвращают обновление этих баз данных состояния блокчейна. Хотя в долгосрочной перспективе мы ожидаем, что совместимая с Ethereum виртуальная машина будет предложена в качестве высокоуровневой абстракции в MultiChain, мы не думаем, что это правильное решение для проверки низкого уровня.
MultiChain 2.0 представит другую парадигму, называемую фильтрами транзакций, которая проверяет отдельные транзакции без ссылки на какое-либо глобальное состояние. Мы ожидаем, что фильтры будут написаны на Javascript и выполнены во встроенном механизме выполнения, таком как v8, который используется в Google Chrome браузер и Node.js Платформа. Конечно, нам нужно убедиться, что код фильтра работает одинаково на каждом узле в блокчейне, блокируя любой источники недетерминизма например, считывание времени, использование случайных чисел, доступ к сети или диску или выполнение математических операций, которые зависят от архитектуры хост-сервера. Создание детерминированной среды выполнения Javascript - это сложная задача, но (не слишком много отдавая) мы считаем, что в будущем она будет полезна для некоторых других функций MultiChain.
Фильтрам будет передан объект JSON, описывающий отдельную транзакцию, структурированный как вывод decoderawtransaction
но с дополнительными полями. Например, каждый ввод транзакции в JSON будет включать структуру, описывающую вывод предыдущей транзакции, которую он проводит, и каждый адрес будет сопровождаться списком разрешений, которые в настоящее время хранятся по этому адресу. Задача фильтра - возвращать логическое значение, указывающее, является ли транзакция приемлемой, и, если нет, предоставлять текстовую ошибку, объясняющую причину. API MultiChain будет включать команды для создания фильтров, проверки их на предыдущих или новых транзакциях и активации их при условии согласия администратора.
В отличие от умных контрактов, если в коде фильтра обнаружена ошибка, ее можно легко заменить новой версией. Тем не менее, как и весь код, полный Тьюринга, фильтры по-прежнему рискуют войти в бесконечный цикл. Эта проблема будет смягчена двумя способами:
- Фильтры могут быть установлены и активированы только администраторами сети при условии согласия. Это дает каждому администратору возможность тщательно изучить код фильтра, прежде чем голосовать за его активацию.
- Все узлы с хорошим поведением будут проверять новые транзакции, используя активные фильтры, прежде чем перенаправлять их на равноправные узлы. В результате, если транзакция отправляет фильтр в бесконечный цикл, транзакция не должна распространяться за пределы узла, который его создал.
Мы ожидаем, что одно популярное приложение для фильтров будет проверять элементы потока. Например, фильтр может гарантировать, что определенные поля в элементах JSON потока содержат числа в определенном диапазоне. В MultiChain 1.0 этот тип проверки должен выполняться на уровне приложения, либо при записи потоковых элементов (если источнику доверяют), либо при их чтении. В отличие от этого, MultiChain 2.0 позволит встраивать эти правила в сам блокчейн, как проверить ограничения в реляционной базе данных.
MultiChain 2.0 будет включать две дополнительные функции, чтобы сделать фильтры еще более мощными. Во-первых, он представит пользовательские разрешения, которые существуют вместе с восемью разрешениями, определенными MultiChain. Как и в случае с обычными разрешениями, они будут предоставляться определенным адресам администраторами (а в некоторых случаях пользователями с activate
привилегии) и включены вместе с адресами в объект JSON, передаваемый фильтру. Например, фильтр может гарантировать, что только адреса с определенным пользовательским разрешением могут записывать определенные типы данных в поток или осуществлять транзакции в конкретном активе выше определенного порогового значения.
Во-вторых, MultiChain 2.0 будет поддерживать пользовательские (двоичные или JSON) метаданные в выходных данных обычной транзакции. Это позволит любому выводу действовать как общая строка базы данных, «принадлежащая» адресу внутри. Фильтры будут видеть любые метаданные в потраченных и созданных результатах транзакции как часть ее описания JSON. В результате MultiChain станет универсальным механизмом общей базы данных, где действительность транзакции определяется настраиваемой функцией строк, которые она создает и удаляет. (Если это звучит немного абстрактно, мы обязательно предоставим несколько конкретных примеров.)
Обновление блокчейна
Поскольку блокчейны рассчитаны на многолетнюю работу, их характеристики могут со временем меняться. Текущая версия MultiChain уже обеспечивает достаточную степень гибкости, позволяя изменять разрешения (включая администраторов и майнеров на основе консенсуса), создавать новые ресурсы и потоки, а также легко добавлять или удалять узлы из сети. Тем не менее, в MultiChain 1.0 основной блокчейн параметрытакие как максимальный размер блока и целевое время подтверждения, фиксируются при создании цепочки и не могут быть впоследствии изменены.
MultiChain 2.0 добавит возможность обновлять блокчейн, позволяя изменять многие (но не все) его параметры, пока цепочка продолжает работать. Как и другие важные операции, обновление блокчейна потребует настраиваемого уровня согласия администратора, где сам этот уровень является параметром, который можно изменить. Обновления вступают в силу с определенного блока и применяются к каждому последующему блоку до следующего обновления.
Параметры блокчейна, которые могут быть обновлены, будут включать:
- Версия протокола, Это позволит обновить блокчейн, созданный с помощью одной версии MultiChain, для поддержки функций новой версии, таких как элементы потока JSON или фильтры транзакций. Действительно, версия протокола
10008
Представленная в MultiChain 1.0 alpha 29 (и использовавшаяся в бета-версии) уже была рассчитана на будущее с недокументированной поддержкой этого типа обновления. Как только блокчейн MultiChain 1.0 будет обновлен до протокола 2.0, он также получит доступ к другим изменениям параметров, описанным здесь. - Блокчейн масштабирование, Становящиеся популярными цепочки блоков могут перерасти начальные значения, установленные для их целевого времени подтверждения или максимальных размеров транзакций и блоков. MultiChain 2.0 позволяет увеличивать или уменьшать эти значения по мере необходимости.
- Модель разрешения, MultiChain 2.0 позволит обновлять многие параметры, связанные с разрешениями и управлением, включая: (a)
anyone-can-*
параметры, которые управляют способами, которыми блокчейн открыт или закрыт, (б)admin-consensus-*
параметры, которые определяют уровни консенсуса администратора, необходимые для определенных операций, и (c)mining-diversity
параметр, который контролирует строгость алгоритма согласованного округления.
Как только эта функциональность обновления будет реализована, не должно быть причин, по которым блокчейн, созданный в MultiChain, не может работать в течение многих десятилетий или более.
Забегая вперед
Мы уже начали работу над MultiChain 2.0, и с нетерпением ждем выполнения этой дорожной карты. Без сомнения, другие улучшения будут включены также. Как и в случае с MultiChain 1.0, мы будем иметь альфа-версии, чтобы разработчики могли использовать и изучать новые функции по мере их реализации (и, конечно, сообщать о любых проблемах или недостатках). Естественно, мы будем продолжать поддерживать версию 1.0 в течение всего этого периода, исправляя любые ошибки, которые появляются.
В заключение я хотел бы поблагодарить нашу команду разработчиков во главе с доктором Михаилом Розанцевым за их постоянное превосходство и усердную работу. Мы рассматриваем MultiChain как простой проект разработки программного обеспечения, в котором качество кода и тестирование важнее всего. Для меня большая честь работать с людьми, которые могут превратить комплексное видение продукта в стабильно работающее программное обеспечение с такой замечательной эффективностью и скоростью.
Пожалуйста, оставьте любые комментарии на LinkedIn.
- SEO-контент и PR-распределение. Получите усиление сегодня.
- PlatoData.Network Вертикальный генеративный ИИ. Расширьте возможности себя. Доступ здесь.
- ПлатонАйСтрим. Интеллект Web3. Расширение знаний. Доступ здесь.
- ПлатонЭСГ. Углерод, чистые технологии, Энергия, Окружающая среда, Солнечная, Управление отходами. Доступ здесь.
- ПлатонЗдоровье. Биотехнологии и клинические исследования. Доступ здесь.
- Источник: https://www.multichain.com/blog/2017/06/multichain-1-beta-2-roadmap/
- :имеет
- :является
- :нет
- :куда
- $UP
- 000
- 1
- 10
- 2015
- 2016
- 22
- 29
- 32
- a
- способность
- в состоянии
- О нас
- выше
- АБСТРАКТ НАЯ
- абстракция
- приемлемый
- доступ
- доступа
- в сопровождении
- через
- Действие (Act):
- активирующий
- активный
- Добавить
- добавленный
- дополнительный
- адрес
- адреса
- администраторы
- снова
- алгоритм
- Все
- позволять
- Позволяющий
- позволяет
- почти
- вдоль
- рядом
- Альфа
- альфа-релиз
- уже
- причислены
- an
- и
- любой
- API
- API
- появиться
- появляется
- Применение
- Приложения
- Применить
- Применение
- соответствующий
- архитектурный
- архитектура
- МЫ
- области
- AS
- активы
- Активы
- At
- автоматически
- прочь
- основанный
- основной
- BE
- становиться
- было
- до
- начинать
- не являетесь
- верить
- ниже
- бенчмаркинг
- beta
- Beyond
- Крупнейшая
- Bitcoin
- Сеть Биткойн
- Заблокировать
- Размер блока
- блокчейн
- блокчейны
- блокирование
- Блоки
- изоферменты печени
- Приведение
- Приносит
- браузер
- Ошибка
- ошибки
- Строительство
- построенный
- но
- by
- под названием
- пришел
- CAN
- не могу
- случаев
- определенный
- цепь
- вызов
- менялась
- изменения
- характеристика
- закрыто
- код
- Колонки
- как
- Комментарии
- коммерческая
- Общий
- сообщество
- сравнение
- совместим
- комплекс
- заключает
- бетон
- параллельный
- подтверждение
- Свяжитесь
- Консенсус
- Алгоритм консенсуса
- постоянно
- содержать
- содержит
- содержание
- продолжать
- продолжающийся
- продолжается
- контрактов
- контраст
- контроль
- контрольная
- Беседы
- Основные
- соответствующий
- может
- "Курс"
- Создайте
- создали
- создает
- Создающий
- создание
- Текущий
- В настоящее время
- изготовленный на заказ
- настраиваемый
- данным
- хранение данных
- База данных
- десятилетия
- решать
- снизилась
- определенный
- Степень
- Обрадованный
- доставки
- убивают
- зависеть
- Зависимость
- глубина
- Производный
- описано
- описывающих
- описание
- Проект
- предназначенный
- подробность
- подробнее
- Определять
- определены
- застройщиков
- Развитие
- Команда разработчиков
- различный
- открытый
- обсуждать
- обсуждающий
- Документация
- сделанный
- Dont
- удвоенны
- сомневаюсь
- dr
- кардинально
- два
- e
- каждый
- легко
- edition
- Издания
- эффект
- фактически
- затрат
- эффективный
- усилие
- усилия
- 8
- или
- встроенный
- включить
- позволяет
- шифрование
- Двигатель
- Проект и
- расширение
- улучшения
- обогащать
- обеспечивать
- входящий
- Предприятие
- Весь
- Окружающая среда
- ошибка
- Ethereum-х
- оценки
- Даже
- События
- События
- Каждая
- исследовать
- пример
- Примеры
- Превосходство
- исключение
- выполненный
- существовать
- ожидать
- объясняя
- расширенная
- дополнительно
- чрезвычайно
- ярмарка
- Особенность
- Особенности
- несколько
- Поля
- фильтр
- фильтры
- окончательный
- Найдите
- окончание
- Во-первых,
- 5
- фиксированной
- исправления
- Трансформируемость
- Фокус
- Что касается
- формат
- Бесплатно
- свободно
- от
- функция
- функциональность
- будущее
- Gain
- Общие
- дает
- Отдаете
- Глобальный
- будет
- управление
- предоставленный
- взрослый
- Жесткий
- тяжелая работа
- Есть
- Герой
- здесь
- на высшем уровне
- очень
- надежды
- кашель
- Как
- How To
- Однако
- HTML
- HTTP
- HTTPS
- i
- if
- немедленная
- реализация
- в XNUMX году
- важную
- in
- В других
- включают
- включены
- В том числе
- неправильный
- расширились
- действительно
- индексированный
- Индексы
- с указанием
- individual
- Бесконечный
- информация
- начальный
- вход
- установлен
- вместо
- Intel
- Intel ядро
- намереваться
- в
- вводить
- выпустили
- инвестиций
- выдача
- IT
- пункты
- ЕГО
- саму трезвость
- JavaScript
- работа
- JSON
- июль
- Прыгать
- июнь
- Основные
- Ключевые области
- ключи
- Фамилия
- новее
- вести
- УЧИТЬСЯ
- привело
- уровень
- уровни
- такое как
- ОГРАНИЧЕНИЯ
- Linux
- Список
- мало
- Длинное
- посмотреть
- серия
- макинтош
- машина
- поддерживать
- сделать
- многих
- много людей
- рынок
- математике
- максимальный
- Май..
- смысл
- проводить измерение
- упомянуть
- объединение
- Метаданные
- Майкл
- может быть
- Шахтеры
- Горнодобывающая промышленность
- модель
- модифицировало
- Месяц
- ежемесячно
- БОЛЕЕ
- много
- мультицепь
- с разными
- my
- Названный
- натуральный
- необходимо
- Необходимость
- сеть
- Новые
- Новые функции
- новый продукт
- следующий
- нет
- узел
- узлы
- сейчас
- номер
- номера
- объект
- объекты
- Очевидный
- of
- предлагают
- предложенный
- on
- В сети
- консолидировать
- ONE
- только
- на
- открытый
- с открытым исходным кодом
- Операционный отдел
- Возможность
- оптимизация
- оптимизирующий
- or
- Другое
- наши
- внешний
- выходной
- выходы
- за
- накладные расходы
- пар
- парадигма
- Параллельные
- параметр
- параметры
- часть
- особый
- партнеры
- Прошло
- мимо
- шаблон
- вглядываться
- Люди
- для
- производительность
- выполнены
- выполнения
- период
- разрешение
- Разрешенные
- Разрешения
- кусок
- запланированный
- Платформа
- Платон
- Платон Интеллектуальные данные
- ПлатонДанные
- Популярное
- должность
- положительный
- возможности,
- После
- мощный
- предварительный
- предотвращать
- предыдущий
- привилегия
- привилегии
- Проблема
- проблемам
- Продукт
- программируемый
- Проект
- протокол
- доказанный
- обеспечивать
- приводит
- что такое варган?
- издатель
- Издатели
- цель
- Оперативная память
- случайный
- ассортимент
- быстро
- скорее
- Сырье
- достигать
- реагировать
- Reading
- реальные
- реального времени
- причина
- разумный
- получила
- ссылка
- регулярный
- связь
- освободить
- публикации
- замечательный
- удаление
- удален
- заменить
- отчету
- Запросы
- требовать
- обязательный
- требуется
- ответ
- ограничение
- результат
- поиск
- возвращают
- правую
- Снижение
- Дорожная карта
- РЯД
- условиями,
- Run
- работает
- время выполнения
- то же
- легко
- Во-вторых
- посмотреть
- кажется
- отправка
- посылает
- сентябрь
- сервер
- набор
- настройки
- установка
- несколько
- общие
- недостатки
- должен
- подпись
- значительный
- подписание
- просто
- с
- одинарной
- Размер
- Размеры
- умный
- Смарт-контракты
- So
- Software
- разработка программного обеспечения
- Решение
- некоторые
- звуки
- Источник
- конкретный
- спецификации
- скорость
- проводит
- потраченный
- стабильный
- и политические лидеры
- Область
- По-прежнему
- Stop
- диск
- хранить
- поток
- потоки
- сильный
- Структура
- структурированный
- предмет
- подписаться
- последующее
- впоследствии
- такие
- лето
- поддержка
- Убедитесь
- приняты
- цель
- Сложность задачи
- TD
- команда
- 10
- срок
- Тестирование
- текстовый
- чем
- благодарно
- который
- Ассоциация
- The Block
- Источник
- их
- Их
- Там.
- Эти
- они
- think
- этой
- те
- мысль
- три
- порог
- по всему
- пропускная способность
- время
- раз
- отметка времени
- в
- сегодня
- слишком
- инструментом
- топ
- совершать сделки
- сделка
- Сделки
- прозрачный
- надежных
- Цунами
- ОЧЕРЕДЬ
- два
- напишите
- Типы
- под
- Universal
- В отличие от
- до
- Обновление ПО
- обновление
- Updates
- обновление
- модернизация
- повышен
- us
- Применение
- использование
- используемый
- полезный
- пользователей
- использования
- через
- VALIDATE
- проверки
- Проверка
- период действия
- ценностное
- Наши ценности
- проверка
- версия
- версии
- жизнеспособный
- Виртуальный
- виртуальная машина
- видение
- посетителей
- голосование
- Кошелек
- законопроект
- Путь..
- способы
- we
- Вебсайт
- ЧТО Ж
- были
- Что
- когда
- будь то
- , которые
- в то время как
- КТО
- чья
- зачем
- Википедия.
- будете
- окна
- в
- без
- слова
- Работа
- работает
- бы
- записывать
- письмо
- письменный
- XML
- лет
- Ты
- зефирнет