Как я писал централизованную криптовалюту на PHP. (Часть 1 — Базовые конспекты + Быстрый старт)

О BitcoinRu.org

BitcoinRu.org – это простой, удобный и бесплатный онлайн Биткоин кошелек.

Преимущества онлайн кошелька BitcoinRu.org:

  1. Средства находятся в безопасности и под Вашим полным контролем.
  2. Никто не может заблокировать Ваш счет.
  3. Открытый доступ к приватным ключам.
  4. Полностью анонимный Биткоин Кошелек и не требует идентификации личности.
  5. Быстрые транзакции в сети Bitcoin.
  6. Полный контроль над комиссией.
  7. Мгновенная регистрация биткоин кошелька.

Чтобы создать биткоин кошелек – просто введите свой e-mail и пароль.

Будь Сам Себе Банком, попробуй открыть биткоин кошелек уже сегодня.

© 2022 BitcoinRu.org – Биткоин Кошелёк на Русском языке Почта для связи: [email protected] Поддержать проект BTC: 3HUeVTsa3pw1dNcqY4Tv3Lr9RMdA1WQfxa

Пожалуйста, подтвердите:

Вы хотите отправить 0.00 BTC

Below is a copy of the transaction we tried to submit

Советовали мне ранее прийти на блокчэйн. Я пришел, скачал их скрипты, запустил, нужен ключ API, заполнил анкету, на запрос ключа API (у них сейчас именно так), подождал денек, мне пришел отказ. Отказ, КАРЛ) Мне отказывают в обслуживании в сфере Bitcoin. Видите ли, им не понравился мой сайт, и они считают, что мне bitcoin принимать не надо. Но – во первых, какое их дело, до моего сайта? Я им написал гневное, полное ненавистью, письмо с требованием выдать мне ключ сию минуту.

Какие еще есть варианты? Какие еще есть 100% надежные способы, есть ли известные библиотеки для работы с Bitcoind например, на PHP, или агрегаторы, или что-то еще?

Google мне не помог, или я искал не то. Различные Робокассы, zденьги и РогаИКопыта пожалуйста не предлагайте, нужно работать без комиссии таких контор.

Вы никогда не думали о продаже своих услуг в обмен на денежную единицу Bitcoin? Сегодня уже много крупных игроков на рынке делают это, начиная с OkCupid и Khan Academy, заканчивая даже WordPress-ом. Помимо этого, некоторые страны задумались об Bitcoin в качестве валюты. В этой серии уроков, мы познакомимся с Bitcoin API и Coinbase SDK.

Coinbase SDK

Для работы с Coinbase вы можете воспользоваться специальными инструментами и SDK, которые доступны абсолютно каждому (с некоторой оговоркой о цене).

  • Прием платежей при помощи Coinbase осуществляется абсолютно бесплатно;
  • Вы соглашаетесь заплатить взнос (1%) в случае, если захотите перевести деньги на ваш банковский счет, но только если ваши продажи превышают $1.000.000 (один миллион долларов);
  • Минимальная сумма перевода в сети Bitcoin составляет 0,001 BTC. Используя Coinbase, можно понизить этот предел до 1 Satoshi (0,00000001 BTC);

Еще одним важный момент: вы можете подключать услугу “Мгновенный обмен”. Данная услуга преобразует сумму платежа Bitcoin сразу в выбранную вами валюту без дополнительных действий.

История интернет архива, описание проекта, награды и блокировка

The Wayback Machine — это архив интернета (Internet Archive). По сути это некоммерческая организация, которая была основана в 1996 году. Задачей данной организации является сбор и хранение всевозможной публичной информации собранной из интернета: веб-страницы, электронные книги, фото- и, видео материалы. Основные сервера расположены в Сан-Франциско. Размер архива на февраль 2017 года составляет 13 петабайт и включает в себя 525 миллиардов копий веб-страниц.

Типы интеграции

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

Первый вариант заключается в использовании одного из инструментов Coinbase, а именно MerchantTools. Вы можете использовать кнопки, страницы и фрэймы. Если вы используете CMS или системой управления электронной коммерцией (WordPress, WooCommerce, Magento. ), то наверняка найдёте много соответствующих плагинов.

Второе способ заключается в полной интеграции сервиса, исключая обращение к Coinbase. На самом деле, мы будем использовать конкретный PHP SDK.

Что мы можем сделать при помощи данного SDK?

  • продавать или покупать bitcoin-ы (или совершать валютный обмен);
  • отправить/запрашивать bitcoin-ы по электронной почте или по bitcoin адресу;
  • принимать платежи bitcoin как мерчант-сервис;
  • хранить bitcoin-ы в одном или нескольких кошельках;
  • иметь доступ к списку операций над bitcoin-ами (блоки, транзакции и т.д.);
  • обрабатывать текущие и микро платежи;

На данный момент существует три версии SDK: для Ruby, Java и PHP. Есть также много неофициальных библиотеки для других языков (Python, .NET, Node.js . ). В нашем случае мы будем использовать PHP SDK, который вы можете найти на GitHub.

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

Русские Блоги

Повторное использование одного и того же адреса кошелька Биткойн — большая проблема конфиденциальности. Если у вас есть простой электронный магазин или веб-сайт, который требует пожертвований, вы можете рассмотреть возможность создания уникального адреса для каждой транзакции.

Есть много платежных систем, таких как Bitpay, которые делают всю тяжелую работу за вас. Недостатком является то, что им нужно использовать ваш закрытый ключ. Однако вы можете использовать расширенный открытый ключ (XPUB) из иерархически детерминированного (HD) кошелька для реализации собственного простого решения.

Весь процесс вBIP32Объяснил в. Я предлагаю вам сначала прочитать его, чтобы получить общее представление об источнике адреса.

В этом уроке мы будем использоватьElectrum,OS X Sierra,Apache 2.4,PHP 7.1иBit-Wasp/bitcoin-php。

Когда дело касается биткойн-кошельков, можно использовать любой HD-кошелек (например, мицелий). Процесс установки должен быть одинаковым в любой UNIX-подобной системе, особенно в Linux.

Библиотека PHP и ее зависимости требуют PHP5.6 +. Откройте терминал и проверьте текущую версию:

php -v

В моей среде вывод:

PHP 7.1.0 (cli) (built: Jan 2 2022 20:09:35) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies

Если версия меньше 5.6, вы должны сначала обновить PHP.

Установите Composer глобально

Перед установкой библиотеки bitcoin-php мы должны убедиться, что установлен composer.

Откройте терминал и введите:

composer -V

Если его содержание выглядит так:Composer version 1.3.0 2016-12-24 00:47:03Вы можете смело пропустить этот шаг.

В противном случае установите:

curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer

Запустить сноваcomposer -VПроверьте, был ли он успешно установлен.

Установить биткойн PHP библиотеку

Перейдите в корневой каталог документов вашего веб-сервера (каталог, в котором хранится ваш сайт) и создайте папкуbitcoin/hdkeys。

В моем примере корень документа~/Sites, Но на других UNIX-подобных системах это может быть/var/www, Если вы не уверены, проверьте настройки вашего сервера.

cd ~/Sites mkdir bitcoin bitcoin/hdkeys cd bitcoin/hdkeys

устанавливатьBit-Wasp/bitcoin-phpБиблиотека:

composer require bitwasp/bitcoin

Он будет загружать библиотеки и зависимости. Этот процесс может занять несколько минут.

image

Если ошибок нет, переходите к следующему шагу.

Генерация адресов кошелька из xpub, ypux и zpub

Я написал небольшой класс, который загружает все необходимые классы bitcoin-php и упаковывает определенные методы для простоты использования.

Загрузите его в каталог:

wget https://gist.githubusercontent.com/mariodian/5b67a1f315a74a7753a6f23d0198ec48/raw/2742a7909dd2621381de53209e85348a078df470/HD.php

Во-первых, нам нужно получить расширенный открытый ключ.

Откройте Electrum, нажмите «Кошелек», затем нажмите «Основной открытый ключ» и скопируйте строку.

image

В Electrum 3.x, перейдите кWallet -> Information -> Master Public Key。

Legacy address(p2pkh)

Откройте ваш любимый текстовый редактор, создайте файл с именем generate.php, затем скопируйте и вставьте следующий код:

PHP SDK

Установка

Давайте начнем с установки пакета библиотеки. На GitHub-овскйо странице данного SDK вы не обнаружите возможность взаимодействия с Composer. Тем не менее, при помощи простого поиска можем найти соответствующий пакет coinbase/coinbase .

Для установки помещаем следующий код в файл composer.json :

Далее используем composer (если он у вас установлен) для скачивания библиотеки:

Аутентификация

Перед тем как приступить к написанию кода, давайте поговорим об аутентификации. У разработчиков есть два варианта аутентификации, для получения доступа к методом API. Первый — это использование пары ключей API и API Secret. Второй, использование OAuth2.

Документация Coinbase вполне понятна: если вы намереваетесь взаимодействовать только с своим ??аккаунт-ом, вносить в него изменения, то можете использовать API Key. Если же вам необходимо, чтобы пользователь использовал свой аккаунт в рамках вашего приложения, то лучше всего воспользоваться OAuth2.

Ключ API + Secret

Создать ключ API очень просто, если у вас есть аккаунт Coinbase. Все, что вам нужно сделать, это перейти сюда и нажать на кнопку «+ New API Key».

Если вы делаете это впервые, то вам скорее всего придётся подтвердить аккаунт при помощи Authy.

Перед вами должна отобразиться следующая форма:

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

Для создания и активации ключа API нажмите сначала кнопку “Create”, а затем “Enable”.

OAuth 2.0

Если вы хотите использовать OAuth 2.0 , то сначала придётся пройти простую процедуру. На это раз вам нужно создавать не ключ API, тем не менее, а OAuth 2.0 приложение. Для этого отправляетесь по адресу https://coinbase.com/oauth/applications. Далее нажмите на кнопку “+ Create an Application”:

Учитываем конспекты перед разработкой

Мы будем использовать двойную систему проверки хешей используя Proof-of-Work. Имеет смысл делать проверку хешей на программном и сетевом прикладном уровне. Это связано с процессом оптимизации нагрузки на сервера. Поскольку, когда мы будем обращаться к серверу за проверкой хеша много раз, появится такая нагрузка. Поэтому, предлагаю поступить следующим методом:

  1. На программном майнере локально проверять хеш на удовлетворение условий.
  2. Когда на программном майнере условия совпадут с необходимыми, делаем проверку на прикладном сетевом уровне (на уровне сервера).

Это, по-моему лучшему мнению, оптимальный способ распределения нагрузки. Проще несколько раз проверить на компьютере локально, чем много раз спамить запросами на сервер.
Название — я придумал простое, и возможно, запоминаемое название — FlyCoin с трех-значным кодом валюты FLC.

База данных — я воспользуюсь простым и удобным вариантом, PDO.

Криптокошельки — будут генерироваться используя GUID и mt_rand, а в качестве seed, будет использоваться время POSIX.

А тебе лень делать функцию проверки хеша? — Да, поэтому я решил взять код из одного старого (с открытым исходным кодом) майнера такой (уже умершей) криптовалюты Entropy, моего друга, Никиты.
Не верится, что он создал только одну криптовалюту. А есть что-то другое?
Вообще, все его творения (которые иногда даже я использую), Вы можете найти в его группе ВКонтакте. Надеюсь, и Вам они тоже пригодятся.

Получение информации из биткоин сети

Самый “тяжеловесный” пункт. Классическим решением является поднятие собственного эталонного полного узла Биткоин, он же — каноничный bitcoind. Это позволит нам общаться с ним по JSON-RPC. С ним мы сможем как получать информацию из сети, так и пушить транзакции. На что стоит обратить внимание:

  • После установки, синхронизация узла может занять длительное время. Только после синхронизации узел можно использовать.
  • Займет немало места. Уже 40+ гигабайт.
  • Мне лично неизвестно какую нагрузку по запросам сможет выдержать.
  • Любые проблемы с падением/обновлением лягут на ваши плечи.

Альтернатива — имплементация полного узла на Ruby+PostgreSQL, Toshi. Неканоничная, но стремящаяся к полной совместимости реализация. Обратите внимание, из-за дополнительных индексов, база данных займет 220+ гигабайт места. Опять таки, требуется синхронизация с сетью. Возможно, есть другие имплементации полного узла (мне неизвестны). Еще одна альтернатива

— использование публичного API провайдера. На его плечи ляжет получение информации из сети и трансляция транзакций.

Лично я рекомендую подключить несколько решений с фейловером.

Трансляция транзакций

Результатом создания и подписи транзакций являются двоичные данные (hex), готовые к пушу в сеть. Пока сеть не увидит транзакцию, считайте, нет никакой транзакции. Когда сеть увидела транзакцию, она считается неподтвержденной. Транзакцию достаточно передать одному узлу биткоин, после чего за считаные секунды транзакцию увидит большая часть Биткоин сети. Транслировать транзакции умеют некоторые клиентские либы из раздела “Работа с адресами” (через какието свои захардкодженые ендпоинты), или любой полный узел. Транслировать транзакцию можно даже руками, зайдя на специальную страничку Биткоин API провайдера и вбив транзакцию в специальную форму. Канонично, подтвержденной транзакцией является транзакция, включенная в 6 и больше последовательных блоков (или в 1-3. Неканонично, но быстрее). Транзакции с нулевой (или недостаточной) комиссией могут оставаться неподтвержденными долгое время (до месяца, в моей практике). Такие транзакции желательно периодически ретранслировать.

Общие принципы работы платежного шлюза

Вариант 1

Предположим, у нас есть уникальный счет (invoice, order), представленый к оплате клиенту, и платить клиент будет в биткоинах. Начнем с того, что надо сконвертировать валюту оригинального счета (USD например) в BTC. Задача это тривиальная и рассматривать мы ее не будем. Далее. Стандартом де факто является генерация нового уникального адреса биткоин под каждый заказ (он же счет, он же invoice, он же ордер). Ожидается, что средства на этот счет переведет только наш клиент, только 1 раз, и только строго указанную сумму (можно больше, никто не обидится, но никак не меньше). Т.о. при поступлении средств на указанный биткоин адрес в нужном количестве, заказ считается оплаченным.

Вкратце, цепочка такая:

  • ордер в системе ->
  • генерируем соответствующий ордеру уникальный адрес биткоин ->
  • показываем клиенту ->
  • ждем оплату на адрес ->
  • ордер закрыт (отмена по истечению срока годности или же поступление BTC и засчитываем факт оплаты)

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

Если вы имеете возможность “отобрать” предоставленный товар или услугу у клиента в случае выявленного факта отмены транзакции, я рекомендую засчитывать неподтвержденный баланс. Это будет означать почти мгновенный процесс оплаты для клиента (в противовес часа ожидания, например). А если какие то транзакции выявятся откаченными в итоге, запросить клиента о повторном платеже, угрожая отобрать услугу/товар.

Не ожидайте что подобный фрод вас тут же массово настигнет, откат транзакций это очень большая редкость, а “вручную” стимулировать подобный откат (на который кстати у злоумышленника нет никаких гарантий успеха) технически неподкованным клиентам нереально (в противовес чарджбекам по кредитным картам).

Еще один пример когда можно засчитывать неподтвержденный баланс — если на подготовку заказа клиента уходит больше одного часа (например обрабатывается корзина покупателя, готовится к отправке курьерской службой). Тут куча времени перепроверить баланс перед самой отправкой товаров.

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

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

Пару слов о времени жизни ордера.

Если ваш товар или услуга жестко привязаны к эквиваленту в фиатной валюте (например USD), то типичный срок жизни ордера составляет 7-15 минут из-за волатильности курса.

Вариант 2

Подходит когда вы не выставляете счета на оплату, а аккаунт юзера содержит некий единый баланс, который он пополняет и с которого тратит. Тут понадобится сгенерить биткоин адрес на пользователя, и показывать ему, с просьбой пополнить на любую сумму. В данном случае надо мониторить адрес на входящие транзакции, пополнять юзеру внутренний баланс при наличии оных. В данном случае я рекомендую засчитывать только подтвержденные транзакции (от 3х блоков и выше).

  • генерация адреса пользователю ->
  • мониторинг транзакций на адрес ->
  • пополнение внутреннего счета при наличии входящих транзакций
Рейтинг
( 1 оценка, среднее 4 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]