Bitcoin Forum

Local => Кодеры => Topic started by: Lexiko on January 18, 2012, 07:46:10 PM



Title: Рабочий пример приема BTC на сайте с исходным
Post by: Lexiko on January 18, 2012, 07:46:10 PM
Решил написать свой собственно пример организации пополнения баланса используя BitCoin.
Скрипт написан на php с использованием немного доработанной обертки для bitcoind api bitcoin-php (https://github.com/mikegogulski/bitcoin-php) , код скрипта-примера размещен тут https://github.com/Lexiks/Bitpay.
Bitcoind демон размещен на бесплатном аккаунте, любезно предоставляемым для тестовых целей облачным хостингом Amazon AWS (http://aws.amazon.com/free/).
Пример работы скрипта находится тут: http://bitpay.tk/

Целью всей этой затеи является создание простого и понятного примера демонстрации возможностей Bitcoin по организации приема платежей.
Следующим шагом будет написание подробной и понятной инструкции , поясняющей код и объясняющей основные принципы работы механизмов биллинга на основе Bitcoin.

Описание работы демки:
Переходим по ссылке http://bitpay.tk/ , вводим любое имя , жмем кнопку вход.
Далее попадаем в админку. В случае, если такое имя уже есть (т.е. пользователь ранее заходил под ним), выводится адрес для оплаты, если же это первый вход, создается аккаунт и выводится номер кошелька.
Номер кошелька навсегда закрепляется за конкретным аккаунтом и не меняется. Т.е. все биткоины, которые будут поступать на этот Btc адрес, не зависимо от плательщика и суммы, будут зачисляться на на баланс для этого аккаунта.

Кнопка "Обновить BTC баланс" проверяет не поступили ли btc на адрес пользователя, если поступили, выводит суммой.
"Обновить USD баланс" выводит значение долларового баланса пользователя (хранится в mysql базе и изменяется после вывода баланса).

"Перевести BTC в USD" проверяет, есть ли на на счету клиента BTC, если есть, перемножает данную сумму на курс (задается в настройках) и добавляет к USD балансу, обнуляя при этом остаток на BTC аккаунте пользователя.
BTC же со счета пользователя переводятся на консолидированный адрес сервиса (который находится в этом же кошельке, поэтому этот перевод является внутренним и не требует подтверждения сетью).

"Зачислить немного тестовых монет" - перебрасывает 1/5 из остатка на общем аккаунте сервиса, на аккаунт клиента, для того, чтобы можно было попробовать как работает пополнение USD баланса , без пополнения адреса.

Также можете закинуть BTC непосредственно со своего кошелька на кошелек аккаунта (все собранные средства пойдут в фонд голодающих на пиво :)) .

По ссылке "Просмотреть остатки по всем аккаунтам на кошельке" можно посмотреть остатки по всем аккаунтам кошелька.
WalletBank - основной аккаунт (произвольно выбранный), на который переводятся BTC, когда списываются с аккаунта пользователя (с него же и выдаются тестовые монеты).
Если извне ни кто ничего не зачислит, число монет в обороте в сумме по всем аккаунтам меняться не будет.

Список транзакций показывает все движения по аккаунту.

Примечания:
Все транзакции , перемещения и остатки в BTC хранятся/обрабатываются непосредственно в BTC базе (которая располазается ан Amazon и с которой связывемся о протоколу RPC).
Mysql база в данном случае используется только для хранения USD баланса.
Аккаунты можете создавать новые , просто перейдя по ссылке [Изменить имя] , и введя любое другое имя. Если ввденного не будет в базе, оно будет создано автоматом и для него сгенерирован соответсвующий адрес.
Авторизации понятно тут никакой нету, сделано для демонстрации, если будете использовать на рабочем проекте, разумеется , прикрутите нормальную идентификацию.

По поводу создания собственного сервера в амазоновском облаке, читаем тут http://habrahabr.ru/blogs/hosting/135713/ , а тут тема на данном форуме по этому поводу https://bitcointalk.org/index.php?topic=58729.0 , если что спрашивайте.

Исходники распространяются под лицензией "берите кто хотите и делайте с ними все что хотите" :) .
Любые пожелания, указания на ошибки и неточности принимаются с большой благодарностью.
Также буду очень признателен, если кто проведет аудит кода и укажет на слабые места и неточности, которые могут привести на практике к проблемам. До тестов на реальном проекте пока недошел.

Скриншоты:

http://img339.imageshack.us/img339/2513/mainqo.th.png (http://img252.imageshack.us/img252/1412/mainm.png)
http://img600.imageshack.us/img600/5748/accountst.th.png (http://img600.imageshack.us/img600/5748/accountst.png)
http://img832.imageshack.us/img832/7708/loginmd.th.png (http://img832.imageshack.us/img832/7708/loginmd.png)


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: Lexiko on January 18, 2012, 08:08:09 PM
Кто подскажет, как узнать сколько подтверждений у последней поступившей на аккаунт суммы. Хочется сделать чтобы не просто выводило баланс в BTC , а например, при 0 блоков, выводило баланс серым цветом , а в скобочках кол-во подтверждений 0. После появления 1-ого подтверждения , должно подсвечиваться нормальным цветом и разблокироваться кнопка "Вывод баланса".


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: N.Z. on January 18, 2012, 09:25:08 PM
А какой сакральный смысл в кнопке "Перевести BTC в USD"? Вывести вроде нельзя, обратно тоже не переведешь. Просто чтоб было, для демонстрации?


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: Lexiko on January 18, 2012, 09:57:17 PM
А какой сакральный смысл в кнопке "Перевести BTC в USD"? Вывести вроде нельзя, обратно тоже не переведешь. Просто чтоб было, для демонстрации?
Да, для демонстрации.

Вообще задумывал сделать возможность вернуть btc на тот адрес, с которого они поступили, но в данном больше сделано для наглядности примера.

В рабочем варианте можно сделать автоматическую проверку и после появления btc на аккаунте, автоматически их обменивать на основную валюту сервиса.

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


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: promankirov on January 19, 2012, 04:20:19 AM
Спасибо за пример! Отправил на пиво  (зачислилось мгновенно) ::)

Quote
Хочется сделать чтобы не просто выводило баланс в BTC , а например, при 0 блоков, выводило баланс серым цветом , а в скобочках кол-во подтверждений 0. После появления 1-ого подтверждения , должно подсвечиваться нормальным цветом
Это нужная вещь. Может быть только нормальным цветом то что уже имеет подтверждения, а рядом "+0.хх BTC(0)" то что еще не подтверждено.

P.S. Нашел небольшую опечатку - "зачислятся на на баланс"


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: Lexiko on January 19, 2012, 07:20:04 PM
Спасибо за пример! Отправил на пиво  (зачислилось мгновенно) ::)
Спасибо за пиво. :)

Quote from: promankirov link=topic=60144.msg701221#msg701221
Quote
Хочется сделать чтобы не просто выводило баланс в BTC , а например, при 0 блоков, выводило баланс серым цветом , а в скобочках кол-во подтверждений 0. После появления 1-ого подтверждения , должно подсвечиваться нормальным цветом
Это нужная вещь. Может быть только нормальным цветом то что уже имеет подтверждения, а рядом "+0.хх BTC(0)" то что еще не подтверждено.
Сделал. Теперь в списке транзакций выводится количество подтверждений (в случае , если их 0, тогда строка подсвечивается серым).
Также баланс теперь показывает сумму подтвержденных и неподтвержденных транзакций отдельно. теперь пользователь может видеть, что его сумма засветилась, но ожидает подтверждения. Вывести неподтвержденные btc нельзя. Это успакаивает.
Количество подтверждений, необходимых для того, чтобы транзакция засчиталась
задается константой MIN_CONFIRMATIONS_COUNT. В примере достаточно хотя бы 1 подтверждения, чтобы стала доступной опция вывода баланса.
Для параноиков можно увеличить это значение до 6. Если же поставить 0, тогда возможность перевода баланса будет доступна практически моментально. Хотя это немного опасно.

Quote from: promankirov link=topic=60144.msg701221#msg701221
P.S. Нашел небольшую опечатку
Спс, поправил.


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: Lexiko on January 20, 2012, 01:54:02 AM
Сверстал дизайн. Вот теперь не стыдно и людям показать. :)
Теперь это все выглядит вот так:

http://img339.imageshack.us/img339/2513/mainqo.png (http://img252.imageshack.us/img252/1412/mainm.png)
http://img600.imageshack.us/img600/5748/accountst.th.png (http://img600.imageshack.us/img600/5748/accountst.png)
http://img832.imageshack.us/img832/7708/loginmd.th.png (http://img832.imageshack.us/img832/7708/loginmd.png)

Напомню, вживую поиграться можно тут  тут (http://bitpay.tk) а совершенно свободно скачать исходники тут  (https://github.com/Lexiks/Bitpay)

Уже практически 99% работы все сделал, можно брать и пользоваться. Максимум пару часов на догонку и можно принимать BTC на своем сайте.


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: promankirov on January 20, 2012, 03:50:17 AM
Quote
Сверстал дизайн.
Отлично! Ждем статью на Хабре!

Подправь текст на сайте
* Данный сайт bitpay.tk не является рабочим сервисом! Он создан для демонстрации организации приема платежей используя Bitcoin . Все исходники можно скачать тут и совршенно свободно использовать их на своем сайте.
Однако весь функционал является полностью рабочим и вы можете тут испытать работоспособность сериптов (создавать новые аккаунты или входить в имеющиеся, зачислять на них BTC виртуальным тестовым или реальным переводом, производить зачисление BTC->USD. Приятного тестирования!


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: Lexiko on January 20, 2012, 05:54:20 AM
Quote from: promankirov link=topic=60144.msg703193#msg703193
Подправь текст на сайте
Вроде подправил. :)

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


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: N.Z. on January 20, 2012, 12:04:12 PM
Немного оффтоп (https://bitcointalk.org/index.php?topic=44094.msg703619#msg703619), хоть вроде и приятный :)


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: Lexiko on January 20, 2012, 10:55:34 PM
Немного оффтоп (https://bitcointalk.org/index.php?topic=44094.msg703619#msg703619), хоть вроде и приятный :)
Спасибо!

Сделал небольшое описание http://bitpay.tk/index.php?action=about
и вот такую графическую схемку работы скрипта
http://img215.imageshack.us/img215/985/bitcoind22.th.png (http://img215.imageshack.us/img215/985/bitcoind22.png)

Курс теперь берется автоматически из тикера MtGox, кэшируется раз в минуту и обновляется вместе с балансами.
Обмен BTC в USD баланс происходит автоматически по этому курсу.
Если курс запросить не удалось, или он почему-то выше установленного в настройках потолка, курс берется из настроек.

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


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: suppp on January 26, 2012, 10:49:00 AM
симпатичный пример, спасибо
twitter bootstrap везде :)


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: Lexiko on January 27, 2012, 02:06:27 AM
симпатичный пример, спасибо
twitter bootstrap везде :)
Всегда пожалуйста.

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

В исходниках теперь пример серверной и клиентской части , реализованной на socket.io (подобную схему используется bitcoinmonitor) .

Способ может не самый идеологически верный - зато универсальный!
На сервере под nodejs работает серверная часть , которая периодически просматривает debug.log в папке с базой bitcoind демона. Как только в логе появляется запись о новом блоке, тут же эмитится событие через socket.io и все подключенные клиенты в тот же момент получают уведомление. А клиентский скрипт получив данное сообщение сразу обновляет баланс и список транзакций.

Можно было конечно перекомпилировать bitcoind , чтобы он куда-то стучал при появлении нового блока или повесить демона под той же nodejs . Но все это дополнительные сложности в которых нет смысла имхо. Даже если учесть что тут что-то не сработает когда-то , поллинг все равно обновит данные, так что совершенно не критичная секция.

Чуть позже сделаю и курс через сокеты.

P.S. что самое интересное, демка работает даже на обычной читалке Kindle 4  :D С вэбсокетами и всеми ajax скриптами.


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: evorios on February 01, 2012, 01:06:23 PM
Изменились квоты в лучшую сторону, как теперь обстоит дело?


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: Lexiko on February 01, 2012, 01:56:19 PM
Изменились квоты в лучшую сторону, как теперь обстоит дело?
Вы про амазон ? В лимиты почти укладываюсь, плачу только за 300 тыс операций ввода/вывода по 3 цента ежесуточно, с учетом бесплатных месячных 2 млн, будет 60-80 центов в мес обслуживание этого дела - шара!

Есть еще вариант сервак держать под nodejs на соответствующем хостинге, но реально думаю дешевле 3-4 баксов в мес не будет, так что на Амазоне пока самый выгодный вариант размещения. После окончания бесплатного периода можно или на другую кредитку перерегать или платить около 3-4$ в мес, что тоже в общем вполне себе доступно.


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: hazarun on July 23, 2013, 10:12:38 PM
Чуть позже сделаю и курс через сокеты.
P.S. что самое интересное, демка работает даже на обычной читалке Kindle 4  :D С вэбсокетами и всеми ajax скриптами.

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


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: anonymous_acc on September 25, 2013, 03:12:14 PM
Заделайте в joomla такую http://developer.joomla.org/ ? Что бы плугином была в дефолтной сборке?


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: mironau on January 18, 2018, 07:28:34 PM
Тема ещё актуальна?


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: Gagarin-btc on March 05, 2018, 12:38:22 PM
Тема ещё актуальна?
Поддерживаю вопрос.
Есть ли вообще современные похожие примеры с приемом и отправкой биткоина и эфира в свободном доступе типа топикастера


Title: Re: Рабочий пример приема BTC на сайте с исходны
Post by: Andriy Volosh on March 06, 2018, 07:02:59 PM
https://www.google.com.ua/search?q=прием+BTC+на+сайте