Анонсуємо новий гаманець MultiChain PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Оголошення нового гаманця MultiChain

Важливий крок уперед для продуктивності та масштабованості

Після двох місяців інтенсивної розробки та тестування ми з гордістю випускаємо найновішу версію MultiChain з повністю переписаним гаманцем у вузлах. Цей новий гаманець перетворює продуктивність та масштабованість створення, отримання та зберігання транзакцій у MultiChain.

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

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

Однак, поряд з цими перевагами, ми також повинні були прийняти той факт, що деякі аспекти Bitcoin Core погано архітектурні. Хоча вони чудово працюють у невеликих масштабах, їх продуктивність різко погіршується з ростом використання. Оскільки загальнодоступна мережа біткойнів все ще обмежена кількома транзакціями в секунду, це не буде проблемою для більшості користувачів Bitcoin Core протягом тривалого часу. Але з приватними блокчейнами, спрямованими на сотні або тисячі транзакцій за секунду, ми знали, що рано чи пізно ці вузькі місця потрібно буде усунути.

Гаманець Bitcoin Core

«Гаманець» у Bitcoin Core завжди був найважливішим із цих больових моментів. Його завдання - зберігати транзакції, які мають особливе значення для вузла, оскільки вони містять адресу блокчейна, якою він володіє, або “лише для годин”Адреса, діяльність якої вона відстежує. Наприклад, кожна транзакція, яка надсилає кошти до або з вузла, повинна зберігатися у гаманці цього вузла. І щоразу, коли вузол створює транзакцію, він повинен шукати один або кілька "невитрачених результатів" попередніх транзакцій гаманця, які витрачатиме нова транзакція.

Отже, що не так з гаманцем, який ми успадкували від Bitcoin Core? Власне, три речі:

  • Усі транзакції гаманця зберігаються в пам'яті. Це спричиняє повільний час запуску та швидке збільшення використання пам'яті.
  • Багато операцій виконують неефективне «повне сканування» кожної транзакції у гаманці, незалежно від того, старі вони чи нові.
  • Кожна транзакція у гаманці зберігається повністю, включаючи будь -які довільні "метадані", які не мають значення з точки зору вузла і вже зберігаються у блокчейні на диску. Це дуже марнотратно.

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

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

Новий гаманець MultiChain

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

Чим відрізняється новий гаманець? Якщо у вас є досвід роботи з базами даних, відповіді можуть бути очевидними:

  • Замість того, щоб зберігати транзакції гаманця в пам'яті, вони зберігаються на диску у відповідному форматі, а транзакції, що представляють інтерес, отримуються за необхідності.
  • Замість того, щоб виконувати повне сканування гаманця, транзакції «індексуються» різними способами, щоб дозволити швидко знаходити ті, що відповідають певним критеріям.
  • Будь -який фрагмент метаданих транзакцій, розмір якого перевищує 256 байт, не зберігається у гаманці. Натомість гаманець містить вказівник на позицію цих метаданих у самому блокчейні.

Іншими словами, ми переробили гаманець in-node для належного керування базою даних (за допомогою LevelDB), а не покладатися на наївну структуру в пам’яті, яку неможливо ефективно шукати. Не дивно, що різниця (виміряна на 3.4 ГГц Intel Core i7) досить велика:

Пропускна здатність транзакцій гаманця MultiChain

Використання пам'яті

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

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

Щоб повторити, всі ці цифри відносяться до швидкості, з якою вузол може створювати, надсилати та зберігати транзакції у своєму локальному гаманці, а не до його пропускної здатності з точки зору обробки транзакцій, створених іншими. Для загальної пропускної здатності мережі MultiChain наразі може обробляти від 200 до 800 ткс/сек, залежно від обладнання, на якому вона працює. (Будьте скептичні щодо будь -якого програмного забезпечення блокчейну, що обіцяє такі цифри, як 100,000 ткс/сек на звичайному обладнанні, тому що вузьким місцем є перевірка цифрового підпису, для виконання якої потрібен реальний час. Якщо вузли не перевіряють підписи окремих транзакцій, блокчейн неможливо використовувати через довіру межі, що робить його не кращим за звичайну розподілену базу даних.)

На завершення, я хотів би згадати про наступну основну функцію, що надходить у 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.

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

Джерело: https://www.multichain.com/blog/2016/07/announcing-the-new-multichain-wallet/

Часова мітка:

Більше від Багатоканальний