Python генерация биткоин ключа

Содержание
  1. Генерируем Bitcoin-адрес на Python
  2. Python генерация биткоин ключа
  3. Launching GitHub Desktop
  4. Launching GitHub Desktop
  5. Launching Xcode
  6. Launching Visual Studio Code
  7. Latest commit
  8. Git stats
  9. Files
  10. README.md
  11. About
  12. Как генерировать свой собственный ключ Bitcoin
  13. Мне нужно создать закрытый ключ?
  14. Что именно является закрытым ключом?
  15. Наивный метод
  16. Криптографически сильный RNG.
  17. Специализированные сайты
  18. Bitaddress: специфики
  19. Делать это сам
  20. Инициализация пула
  21. Посев с входом
  22. Генерация закрытого ключа
  23. в действии
  24. Заключение
  25. Внедряем оплату BTC куда угодно (Python)
  26. Предыстория
  27. К чему я пришел
  28. Генерация дочернего адреса кошелька для каждого пользователя:
  29. Проверка баланса и транзакции:
  30. Транзакции
  31. Применение
  32. Функционал бота
  33. Регистрация пользователя
  34. Проверка баланса
  35. Получить BTC
  36. Отправить BTC
  37. Исходники и как запустить
  38. Итого
  39. Читают сейчас
  40. Редакторский дайджест
  41. Похожие публикации
  42. Сетевой интерфейс для программируемого реле с поддержкой Telegram Bot и HomeKit
  43. PayPal запускает сервис оплаты криптовалютой
  44. Telegram bot + ML: универсальный алгоритм совмещения
  45. Курсы
  46. Минуточку внимания
  47. Комментарии 22

Генерируем Bitcoin-адрес на Python

Тема криптовалют снова начинает будоражить интернет. Супер, что вам не надо идти в отделение банка с паспортом и выстаивать очередь, чтобы открыть счет. Сгенерировать кошелек Bitcoin — дело нескольких строк кода на Python.

Нам понадобятся библиотеки base58 и ecdsa. base58 – это кодирование бинарных данных 58-ю печатными символами (цифрами и латинскими буквами, кроме 0, O, I, l, которые похожи друг на друга). ecdsa – библиотека криптографии на эллиптических кривых.

Импортируем то, что нужно:

Нам нужен приватный ключ, из него мы вычислим публичный ключ, а из него – адрес кошелька Bitcoin. (Обратная процедура не возможна без полного перебора до конца времен). Приватный ключ – это 32 байта данных, которые мы получим из криптографически-надежного источника случайных чисел. Вообще можно придумать свой приватный ключ самостоятельно, если так хочется. Для генерации случайного приватного ключа мы воспользуемся библиотекой ecdsa:

Вычислим этой же библиотекой публичный ключ и добавим спереди байт 0x4 (это признак «несжатого» публичного ключа; есть и другие форматы).

Теперь нужно из публичного ключа сделать привычный число-буквенный адрес Bitcoin. Взглянем на схему:

Для получения адреса из публичного ключа вычисляем сначала RIPEMD160(SHA256(public-key)):

Дополняем его префиксом 0x0 (главная сеть Bitcoin):

Вычисляем контрольную сумму (нужна, чтобы наши денюжки не пропадали, если мы ошибемся в каком-то символе адреса). Контрольная сумма это первые 4 байта от SHA256(SHA256(r)):

Получаем адрес кошелька, закодировав в base58 сложенные r и checksum:

Генерация приватного ключа из своего источника случайностей, например, os.urandom:

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

Полный пример кода генерации кошельков.

Проверить ключи и адрес можно здесь. (Нажимаем Skip, дальше Enter my own…)

Подробнее по теме можно почитать здесь.

Специально для канала @pyway. Подписывайтесь на мой канал в Телеграм @pyway 👈

Источник

Python генерация биткоин ключа

Minimal Bitcoin address generator in Python

Use Git or checkout with SVN using the web URL.

Work fast with our official CLI. Learn more.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

addrgen — minimal Bitcoin address generator in Python

This script generates a single Bitcoin address using the compressed public key format and prints it with its private key.

For some reason, the script segfaults on OS X unless it’s run in in 32-bit mode. Instead, those on OS X should run:

Generating other types of addresses

Supply the version number for your desired address with the —otherversion switch. (supported by pywallet at least)

If you wish to generate addresses based on a passphrase, a given private key, or some other option look at the commented lines in the test() function.

Created and Licensed Public Domain by Joric/bitcoin-dev June 2012 with minor modifications by David Sterry.

About

Minimal Bitcoin address generator in Python

Источник

Как генерировать свой собственный ключ Bitcoin

Автор: Timur Badretdinov
Дата записи

В Cryptootogurns, закрытый ключ позволяет пользователю получать доступ к своему кошельку. Человек, который держит закрытый ключ, полностью контролирует монеты в этом кошельке. По этой причине вы должны держать его в секрете. И если вы действительно хотите создать ключ самостоятельно, имеет смысл генерировать его безопасно.

Здесь я предоставим введение в частные ключи и покажу вам, как вы можете создать свой собственный ключ, используя различные криптографические функции. Я предоставим описание алгоритма и кода в Python.

Мне нужно создать закрытый ключ?

Большую часть времени вы этого не делаете. Например, если вы используете веб-кошелек, такой как Coinbase или Blockchain.info, они создают и управляют закрытым ключом для вас. Это то же самое для обменов.

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

Так зачем все равно создавать это? Вот причины, которые у меня есть:

  • Вы хотите убедиться, что никто не знает ключ
  • Вы просто хотите узнать больше о криптографии и поколении случайных чисел (RNG)

Что именно является закрытым ключом?

Формально закрытый ключ для биткойна (и многие другие криптовалюты) представляет собой серию из 32 байтов. Теперь есть много способов записать эти байты. Это может быть строка 256 и нули (32 *) или 100 рулонов для костей. Это может быть двоичная строка, Base64, A Ключ WiF , Мноническая фраза или, наконец, шестигранная строка. Для наших целей мы будем использовать шестигранную строку длиной 64 символов.

Читайте также:  Эфириум краны которые платят 2021

Почему ровно 32 байта? Отличный вопрос! Видите ли, чтобы создать открытый ключ от частного, биткойна использует ECDSA или алгоритм цифровой подписи эллиптической кривой. Более конкретно, он использует одну конкретную кривую под названием secp256k1 Отказ

Теперь эта кривая имеет порядок 256 битов, принимает 256 битов в качестве ввода и выводит 256-битных целых чисел. И 256 бит ровно 32 байта. Итак, чтобы поставить его другим способом, нам нужны 32 байта данных для корма на эту кривую алгоритм.

Для закрытого ключа есть дополнительное требование. Поскольку мы используем ECDSA, ключ должен быть положительным и должен быть меньше порядка кривой. Орден ecp256k1 – FFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAEEDCE6AF48A03BBFD25E8CD0364141 , который довольно большой: почти любой 32-байтовый номер будет меньше, чем он.

Наивный метод

Итак, как мы создаем 32-байтовое целое число? Первое, что приходит к уму, это просто использовать библиотеку RNG на вашем языке выбора. Python даже обеспечивает милый способ генерации достаточно лишь битов:

Выглядит хорошо, но на самом деле, это не так. Видите ли, обычные библиотеки RNG не предназначены для криптографии, так как они не очень безопасны. Они генерируют номера на основе семян, и по умолчанию семя – точное время. Таким образом, если вы знаете примерно, когда я сгенерировал биты выше, все, что вам нужно сделать, это грубые заставить несколько вариантов.

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

Так что давайте постараемся сделать это более безопасно.

Криптографически сильный RNG.

Наряду со стандартным методом RNG языки программирования обычно предоставляют RNG специально предназначенные для криптографических операций. Этот метод, как правило, гораздо более безопасен, потому что он рисует энтропию прямо из операционной системы. Результатом такого RNG гораздо сложнее воспроизвести. Вы не можете сделать это, зная время поколения или имея семена, потому что нет семян. Ну, по крайней мере, пользователь не входит в семену – скорее, он создан программой.

В Python, криптографически сильный RNG реализован в Секреты модуль. Давайте изменим код выше, чтобы заставить конфиденциальный ключ генерации в безопасности!

Это удивительно. Могу поспорить, вы не сможете воспроизвести это даже с доступом к своему ПК. Но мы можем пойти глубже?

Специализированные сайты

Есть сайты, которые генерируют случайные номера для вас. Мы рассмотрим всего два здесь. Один из них Random.org , известный генератор случайного числа общего назначения. Еще один это Bitaddress.org , который разработан специально для генерации ключевого ключа биткойнов.

Может Random.org Помогите нам генерировать ключ? Определенно, как у них есть Сервис Для генерации случайных байтов. Но здесь возникают две проблемы. Random.org Претензии быть по-настоящему случайным генератором, но вы можете доверять этому? Можете ли вы быть уверены, что это действительно случайно? Можете ли вы быть уверены, что владелец не записывает все результаты поколений, особенно те, которые выглядят как частные ключи? Ответ зависит от вас. О, и вы не можете запустить его локально, что является дополнительной проблемой. Этот метод не закреплен на 100%.

Теперь Bitaddress.org это совершенно другая история. Это открытый источник, так что вы можете увидеть, что находится под его капюшоном. Это на стороне клиента, так что вы можете скачать его и запустить ее локально, даже без подключения к Интернету.

Итак, как это работает? Он использует вас – да, вы – как источник энтропии. Он просит вас переместить мышь или нажать случайные клавиши. Вы делаете это достаточно долго, чтобы сделать его невозможным воспроизводить результаты.

Вы заинтересованы в том, чтобы увидеть, как Bitaddress.org работает? Для образовательных целей мы посмотрим на свой код и попытаемся воспроизвести его в Python.

Bitaddress: специфики

Bitaddress создает энтропию в двух формах: движение мыши и ключевым давлением. Мы поговорим о обоих, но мы сосредоточимся на ключевых прессах, так как трудно реализовать отслеживание мыши в Python Lib. Мы ожидаем, что конечный пользователь вводит кнопки, пока у нас будет достаточно энтропии, а затем мы создадим ключ.

Bitaddress делает три вещи. Инициализирует байтовый массив, пытаясь получить столько же энтропий, насколько это возможно с вашего компьютера, он заполняет массив с помощью пользовательского ввода, а затем он генерирует закрытый ключ.

Bitaddress использует 256-байтовый массив для хранения энтропии. Этот массив переписан в циклах, поэтому, когда массив заполнен впервые, указатель выходит на ноль, и процесс заполнения запускается снова.

Программа инициирует массив с 256 байтами из window.crypto Отказ Затем он пишет временной метку, чтобы получить дополнительные 4 байта энтропии. Наконец, он получает такие данные как размер экрана, ваш часовой пояс, информацию о плагинах браузера, вашего языка и многого другого. Это дает ему еще 6 байтов.

После инициализации программа постоянно ждет для пользовательского ввода, чтобы переписать исходные байты. Когда пользователь перемещает курсор, программа записывает положение курсора. Когда пользователь нажимает кнопки, программа записывает код CHAR нажатой кнопки.

Наконец, Bitaddress использует накопленную энтропию для генерации закрытого ключа. Это должно генерировать 32 байта. Для этой задачи Bitaddress использует алгоритм RNG, называемый ARC4. Программа инициализирует ARC4 с текущим временем и собранной энтропией, затем получает байты один на один 32 раза.

Это все упрощение того, как работает программа, но я надеюсь, что вы получите идею. Вы можете проверить алгоритм в полной детализации на Github Отказ

Делать это сам

Для наших целей мы построим более простую версию BitAddress. Во-первых, мы не будем собирать данные о машине и местоположении пользователя. Во-вторых, мы будем вводить энтропию только через текст, так как вполне сложно постоянно получать позицию мыши с помощью сценария Python (Check Pyautogui Если вы хотите это сделать).

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

Читайте также:  Повышение квалификации по привлечению инвестиций

Инициализация пула

Здесь мы поставили байты из криптографического RNG и временем времени. __seed_int и __seed_byte являются двумя помощниками, которые вставляют энтропию в наш массив бассейна. Обратите внимание, что мы используем Секреты Отказ

Посев с входом

Здесь мы сначала поставьте временную метку, а затем входную строку, символ по символу.

Генерация закрытого ключа

Эта часть может выглядеть усердно, но это на самом деле очень просто.

Во-первых, нам нужно создать 32-байтовый номер, используя наш пул. К сожалению, мы не можем просто создать наших собственных Случайные Объект и использовать его только для ключевого поколения. Вместо этого есть общий объект, который используется любым кодом, который работает в одном скрипте.

Что это значит для нас? Это означает, что в каждый момент, в любом месте кода, один простой Random.seed (0) Может уничтожить всю нашу собранную энтропию. Мы не хотим этого. К счастью, Python предоставляет Гутрите и SetState методы. Итак, чтобы сохранить нашу энтропию каждый раз, когда мы создаем ключ, мы помним состояние, которое мы остановились и установили его в следующий раз, когда мы хотим сделать ключ.

Во-вторых, мы просто убедимся, что наш ключ находится в диапазоне (1, Curve_order ). Это требование для всех частных ключей ECDSA. Curve_Order это порядок кривой TECP256K1, который является FFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAEEDCE6AF48A03BBFD25E8CD0364141 Отказ

Наконец, для удобства мы преобразуем в Hex, и разделите часть «0x».

в действии

Давайте попробуем использовать библиотеку. На самом деле, это действительно просто: вы можете генерировать закрытый ключ в трех строках кода!

Вы можете увидеть это самостоятельно. Ключ случайно и полностью действителен. Более того, каждый раз, когда вы запускаете этот код, вы получаете разные результаты.

Заключение

Как видите, есть много способов генерировать частные ключи. Они отличаются простотой и безопасностью.

Генерация закрытого ключа – это только первый шаг. Следующим шагом является извлечение открытого ключа и адреса кошелька, который вы можете использовать для получения платежей. Процесс генерации кошелька отличается для биткойна и Ethereum, и я планирую написать еще две статьи на эту тему.

Если вы хотите играть с кодом, я опубликовал это для этого Github Repository Отказ

Я делаю курс по криптовалютам здесь на новостях FreeCodeCamp. То первая часть это подробное описание блокчана.

Я также публикую случайные мысли о Crypto On Твиттер Так что вы можете проверить это.

Источник

Внедряем оплату BTC куда угодно (Python)

Предыстория

Полгода назад взялся за один проект с возможностью оплаты биткойном. Так как проект делали на языке python, то и оплату хотелось реализовать на нем же. Сразу же взялся анализировать готовые решения, доступные библиотеки и Rest API Blockchain.com. С апи блокчейна я моментально обломался, так как их токен для использования апи довольно не просто получить.

Затем решил юзать различные библиотеки (block-io, bitcoinlib, blockchain и др.) После пару ночей попыток реализовать нормальную оплату, остановился на bitcoinlib, так как она более менее стабильно работала, и я спокойно переводил с одного кошелька на другой. Беда наступила когда появились первые 100 пользователей и вся оплата внезапно рухнула. Возможно я криво написал или что-то не так понял с работой библиотеки, но любые попытки восстановить работу оплаты были безуспешны, только если обнулять бдшку, но и так неизвестно сколько бы она продержалась.

В итоге решили оставить без BTC оплаты. Я опечалился и не связывался с оплатой биткойном полгода.

К чему я пришел

На днях я все-таки решил добить этот вопрос для себя, надеюсь кому-то еще пригодятся мои наработки.

Все начинается с seed фразы. Мнемоническая фраза (англ. Mnemonic phrase или Seed фраза) — это список слов, которые хранят всю информацию, необходимую для восстановления биткоин-кошелька. Существуют несколько стандартов генерации фраз BIP 32, BIP 39, BIP 44, и еще BIP 49. Самый распространенный — это BIP 44 (12 слов).

Пример seed фразы:

vivid area able second bicycle advance demand alpha flip stable drift route

Чтобы сгенерировать фразу будем использовать библиотеку bipwallet. Чтобы ее установить воспользуемся командой pip install bipwallet.

Если мы хотим получить напрямую доступ к биткойн кошельку, то, зная фразу, можем сразу восставновить кошелек в blockhain.com:

Следующим шагом мы будем преобразовывать нашу seed фразу до получения нужного адреса кошелька биткойна.

Чтобы во всем не запутаться и знать какие данные мы должны получить, я использовал сайт https://iancoleman.io/bip39/

Генерация дочернего адреса кошелька для каждого пользователя:

Чтобы получить наш нулевой адрес Биткойн кошелька на основе seed фразы (12VeK1eRgPHRUikNLXq3Nuz99gS2S46QMD), нам нужно пройти всю цепочку преобразований. Методом проб и ошибок мне все-таки удалось получить адрес кошелька следующим кодом:

Данная функция возвращает адрес кошелька и wif в зависимости номера. Максимальное число с которым удалось получить адрес это 999999999.

wif (Wallet import format) — это просто кодирование байтов ключа в кодировку Base58 + контрольная сумма. Он нам понадобится в дальнейшем при генерации транзакции.

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

Проверка баланса и транзакции:

Теперь когда у каждого пользователя свой личный адрес биткойн кошелька, нужно проверить баланс этого адреса. Для этого мы будем обращаться к сайту Blockchain.com дабы получить нужную информацию.

Вот таким простым кодом мы можем получить всю информацию по балансу и транзакциях пользователя. Дальше все зависит от логики самого приложения.

Читайте также:  Когда отключат майнинг эфира

Транзакции

На данном этапе мы дали каждому пользователю свой адрес кошелька и знаем все транзакции с данным адресом, но этого недостаточно. Нам нужно чтобы мы могли отправить его же деньги обратно. Для этого воспользуемся библотекой bit. Чтобы ее установить воспользуемся командой pip install bit.

В итоге мы получили вот такую транзакцию:

Выглядит красиво, но что с этим делать?

Можно зайти на сайт https://www.blockchain.com/btc/pushtx

и вручную отправить эту транзакцию.

Также можем декодировать эту транзакцию и проверить все ли верно мы указали https://www.blockchain.com/btc/decode-tx

Но нам нужно это автоматизировать, поэтому напишем несколько строк:

Выполним пост запрос, если получаем ответ: Transaction Submitted. Это значит, что через несколько секунд транзакция появится в сети и деньги спишутся с пользователя.

Применение

Ну чтож, написав всего несколько десятков строк, мы можем генерировать для каждого пользователя свой адрес кошелка, проверять его баланс, переводить биткойны с одного кошелька на любой другой.

Для демонстрации работы BTC оплаты, я напишу простенького телеграм бота, который будет выполнять роль клиента Blockchain.com, то есть вы сможете хранить в нем свои биткойны и от туда же переводить другим людям. Ссылка на исходники бота будут в конце.

Задеплоил на heroku, так что надеюсь не будет падать)

Функционал бота

Регистрация пользователя

В качестве БД я использовал sqlite3 и создал одну таблицу пользователей:

При нажатии start мы регистрируем пользователя, генерируем для него адрес биткойн кошелька, wif и добавляем данные в БД:

Проверка баланса

Получить BTC

Для создания qr-кода я использовал библиотеку qrcode и на вход передал ранее сгенерированный адрес биткойн кошелька из БД.

Отправить BTC

Проверим через сайт, что транзакция отправилась:

Исходники и как запустить

Скачать исходники бота можно тут github.com/Lil-hack/blockchain-client

Склонировав репозиторий, устанавливаем необходимые пакеты:

pip install -r requirements.txt

Некоторые библиотеки у меня не заработали на windows, так что лучше сразу запускать на linux.

В файле main.py заменяем ваш токен телеграм бота:

В файле btc_core.py заменяем на вашу seed фразу:

И запускаем бота командой: python main.py

Работает на python 3.7.0 и выше. Бот написан за один вечер, так что просьба строго не судить ^^

Итого

Как оказалось, все довольно не сложно, и в несколько десятков строк можно добавить оплату BTC в любой python проект. Я не профи в криптографии, так что скорее всего многие моменты упустил, но надеюсь кому-то эта статья будет полезна.

Читают сейчас

Редакторский дайджест

Присылаем лучшие статьи раз в месяц

Скоро на этот адрес придет письмо. Подтвердите подписку, если всё в силе.

Похожие публикации

Сетевой интерфейс для программируемого реле с поддержкой Telegram Bot и HomeKit

PayPal запускает сервис оплаты криптовалютой

Telegram bot + ML: универсальный алгоритм совмещения

Курсы

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Минуточку внимания

Комментарии 22

как по мне — существенный минус данного решения — необходимость доверять сторонним ресурсам.
альтернатива:
1. ставим локальную ноду.
2. работаем с ней по json-rpc и вовремя бэкапим. можно обойтись просто requests в случае питона, или разнообразными curl.

минус: большой объем требуемого дискового пространства, 200 Гб в случае bitcoin.

«Bytes: 385 611 696 957» если точнее.

Бекапить не надо. Можно подключиться еще одной нодой и тогда транзакции будут на обеих нодах автоматом из-за бродкаста.

Блокчейн можно урезать до любого удобного размера (у меня 4гб например).

Можно вообще бекапить только мастер ключ (не путать с ключом к кошельку. ). Напечатайте на бумажке, заламинируйте и положите в сейф.
Потом от мастер ключа определять подключи по номерам не проблема главное пути запомнить.

Блокчейн бекапить вообще жесть несусветная…

А вам не страшно использовать велосипед для приема реальных денег?

Спасибо, мне статья понравилась

Это в любом случае «горячий» кошелёк, на нем не стоит хранить средства, а сразу переводить на холодный. Так что если и украдут, то немного. Но доверять третьей стороне проверку транзакции я бы не стал.

Надо защищать сервер разумеется.

В принципе когда речь идет о бюджетном решении — используем достаточно стандартный прием.
Ставится отдельный сервак (1) любой степени дохлости непосредственно для проведения операций и хранения данных, в идеале в защищенном месте (хотя при определённых танцах с бубном можно и в ДЦ поставить). Это дешево. На серваке запрещаются ВСЕ входящие коннекты в принципе, если нет физ.доступа — можно оставить конечно какой-то сильно урезанный и защищенный вход, но лучше не надо.
Сервак с сайтом (2) абсолютно отдельный. Когда он хочет что бы какая-то операция выполнилась, он выкладывает файлик зашифрованный ключом со своими «пожеланиями».
Первый сервак раз с хорошей частотой опрашивает второй сервак на предмет новых заданий, расшифровывает ключом, независимо! проверяет их на легальность (сверяет балансы, логи операций) и проводит только если все ок и соответственно отчитывается второму по завершении.

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

Основное преимущество схемы — отличное соотношение «затраты/безопасность». Да, на проектах где «денег куры не клюют» такой колхоз так себе идея, но когда бюджет ограничен — все затраты тут это доп. сервак, который вообще может стоять хоть у заказчика в кладовке (траффик на проведение операций небольшой, хватает и резервного 4г модема если что с резервным дизель-генератором:) для обеспечения неплохой отказоустойчивости).

Источник

Оцените статью