Анонс нового кошелька MultiChain PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Анонс нового кошелька MultiChain

Важный шаг вперед для производительности и масштабируемости

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

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

С другой стороны, это решение помогло нам быстрее выйти на рынок по сравнению с кодированием узла блокчейна с нуля. Несмотря на множество различий между публичной и частной цепочками блоков, они имеют много общего технического подхода, включая одноранговый протокол, структуру транзакций и блоков, создание и проверку цифровой подписи, согласованные правила, управление ключами и необходимость API узла. Форкинг от Bitcoin Core позволил нам использовать его зрелость и сосредоточиться на том, что MultiChain добавляет к блокчейнам - конфигурируемость, разрешения и поддержка собственных активов. В результате мы смогли выпустить первую альфа-версию в июне 2015 года, всего через 6 месяцев после начала разработки.

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

Биткойн-кошелек

«Кошелек» внутри Биткойн-ядра всегда был самым важным из этих болевых точек. Его работа заключается в хранении транзакций, которые имеют особое отношение к узлу, потому что они включают адрес блокчейна, которым он владеет, или «часы толькоАдрес, деятельность которого он отслеживает. Например, каждая транзакция, которая отправляет средства в или из узла, должна храниться в кошельке этого узла. И каждый раз, когда узел создает транзакцию, он должен искать один или несколько «неизрасходованных выходов» предыдущих транзакций кошелька, которые потратит новая транзакция.

Так что не так с кошельком, который мы унаследовали от Bitcoin Core? На самом деле, три вещи:

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

Как следствие, при хранении около 20,000 200,000 транзакций кошелек Bitcoin Core значительно замедляется. После 8 80 или около того, он практически останавливается. Еще хуже, поскольку блокчейн MultiChain допускает до XNUMX МБ метаданных на транзакцию (по сравнению с XNUMX байтами биткойна), требования к памяти кошелька могут быстро увеличиваться даже при небольшом количестве транзакций.

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

Новый кошелек MultiChain

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

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

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

Другими словами, мы перестроили кошелек в узле, чтобы он должным образом управлялся базой данных (используя УровеньБД), а не полагаться на наивную структуру в памяти, которую нельзя эффективно искать. Неудивительно, что разница (измеренная на 3.4 ГГц Intel Core i7) довольно существенна:

Пропускная способность транзакций с несколькими кошельками

Использование памяти

Графики показывают, что, как только старый кошелек содержит 250,000 3 транзакций, его скорость отправки падает до 600 тх / с, и это добавляет 100 МБ к использованию памяти узлом. В отличие от этого, новый кошелек поддерживает более 90 ткс / сек и добавляет всего 6 МБ. На этом этапе мы прекратили тестирование старого кошелька, но даже с 8-100 миллионами хранимых транзакций новый кошелек продолжает отправлять более 250 ткс / сек и занимает около XNUMX МБ используемой оперативной памяти (из-за кэширования базы данных).

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

Повторим, что все эти числа относятся к скорости, с которой узел может создавать, отправлять и хранить транзакции в своем локальном кошельке, а не к его пропускной способности с точки зрения обработки транзакций, созданных другими. Для общей пропускной способности сети MultiChain в настоящее время может обрабатывать от 200 до 800 тх / сек, в зависимости от оборудования, на котором работает. (Скептически относитесь к любому многообещающему количеству программного обеспечения блокчейна, например, 100,000 XNUMX ткс / сек на обычном оборудовании, поскольку узким местом является проверка цифровой подписи, выполнение которой требует реального времени. Если узлы не проверяют подписи отдельных транзакций, блокчейн невозможно использовать через доверие границы, что делает его не лучше, чем обычная распределенная база данных.)

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

Пожалуйста, оставьте любые комментарии на LinkedIn.

Техническое приложение

Начиная с MultiChain alpha 22, вы можете проверить, какая версия кошелька работает в данный момент, изучив walletdbversion поле getinfo or getwalletinfo Вызовы API. Значение 1 означает оригинальный кошелек Bitcoin Core, и 2 означает новый кошелек MultiChain.

Если вы запустите новую версию MultiChain в существующей цепочке, она не сразу переключится на новый кошелек. Вы можете обновить кошелек, остановив узел, а затем снова запустив multichaind с параметрами -walletdbversion=2 –rescan, Вы также можете понизить рейтинг, используя –walletdbversion=1 –rescan.

По умолчанию, когда вы запускаете узел в новой цепочке, он автоматически использует новый кошелек. Вы можете изменить это, запустив multichaind впервые с параметром –walletdbversion=1.

С новым кошельком все MultiChain API работать точно так же, как и раньше, за исключением старых API запросов к транзакциям getreceivedbyaddress, listreceivedbyaddress и listtransactions (использование listwallettransactions or listaddresstransactions вместо). Кроме того, новый кошелек не поддерживает API-вызовы и параметры, связанные с плохо реализованным и устаревшим механизмом «учетных записей» Bitcoin Core, который никогда не был должным образом поддержан MultiChain. Эти вызовы безопасно отключены с сообщением об ошибке.

Источник: https://www.multichain.com/blog/2016/07/announcing-the-new-multichain-wallet/

Отметка времени:

Больше от многоцепочечного