- websprojekt
- Автор темы
- Депозит: 1000$
- 155
Создаём свой биткоин миксер
Биткоин-кошельки дают только ощущение анонимности. При регистрации кошелька, генерируются новые адреса, без каких либо контактных данных, местоположении и информации о пользователе. Но Биткоин это псевдо-анонимная криптовалюта, в которой можно просмотреть всю историю транзакций и взаимодействие адресов через блокчейн-эксплорер.
Существуют несколько коммерческих сервисов деанонимизации кошельков. Они круглосуточно парсят информацию об участниках форумов, изучают горячие кошельки крупных бирж и обменников, мониторят движения инвестиций и теневой рынок. Таким образом собирается огромная база соответствий адрес - владелец, как узловые элементы в цепочке денег. По ним то и можно определить движение средств.
Принцип работы Биткоин миксера
Не все пользователи хотели бы показывать свои транзакции, например при оплате услуг индустрии для взрослых, крипто-голосований или покупки цифрового контента. Да и вообще, неприкосновенность частной личной жизни, персональных данных и финансов, в Европейских странах защищена законом.
Для того чтобы прервать или запутать цепочку транзакций созданы биткоин миксер (или тумблер). Главная цель процесса- полностью разорвать связь входящей оплаты и анонимной транзакции, поступившей на кошелек получателя платежа.
В данном процессе могут участвовать:
Подготовка к разработке
В этой статье мы не даем готового решения, которое можно скачать и поставить. Потому что логика смешивания и отдачи монет имеет огромное количество вариантов. Также можно распоряжаться не только своими биткоинами, а привлекать инвестиционные под процент или вообще обходиться только входящими монетами. В этой статье, мы лишь расскажем о ключевых возможностях реализации, методах приема платежей и распределения транзакций.
В целях безопасности, проект можно разделить на две части: главная страница и сервер выплаты (backend). В случае компрометации веб сервера, злоумышленник не будет иметь возможности получить доступ к денежным ресурсам миксера. Серверная часть будет принимать колбэк от платежного сервера, выполнять выплаты по таймеру и управлять капиталом сервиса.
Поднимать собственную Битоин ноду, держать отдельный мощный сервер и обслуживать его, довольно дорого и трудозатратно. Ведь ноде нужно минимум 200Гб жесткого диска, 2Гб ОЗУ и более менее приличный процессор. Гораздо удобнее использовать готовые API (Application Programming Interface).
Найдено несколько таких вариантов:
https://btcpayjungle.com/
https://www.blockchain.com/ru/api
https://bitpay.com/api
https://apirone.com/ru/docs/wallet
Возьмем готовое решение от Apirone. Здесь все входящие транзакции можно принимать абсолютно бесплатно. А в одной транзакции можно указать до 255 получателей и заплатить фиксированную комиссию, всего 0.0002 BTC ($0.7). Такой сервис идеально подходит для нашего Миксера. Его легко масштабировать и быстро разворачивать на любом сервере. К тому же не требуется отправлять документы и деанонимизировать себя.
Кошельки полностью анонимные, а создавать их можно сколько угодно, без ограничений.
Для хранения чистых Биткоинов нам потребуется Saving (накопительный) кошелек. Создаем его простым POST запросом в JSON формате: {"type": "saving"} на эндпоинт
https://apirone.com/api/v2/btc/wallet
В ответ получаем результат в JSON формате:
PHP:
{
"wallet": "8e9c53a62755bcc66e4d2aaae3a2af6d",
"type": "saving",
"transfer_key": "7j0ap91o99cxj8k97j0ap91o99cxj8k9",
"currency": "btc"
}
wallet - идентификатор созданного кошелька.
transfer_key - ключ для создания выплат и управления кошельком.
Главная страница
На главной странице мы поместим возможность оплатить одному или сразу нескольким получателям в разных процентных пропорциях, а также дадим возможность выбрать сервисный сбор самостоятельно.
По нажатию на кнопку Продолжить, адреса и соответветствующие проценты сохраняются как заказ, в базе данных.
Для нашего уже имеющегося кошелька, создаем новый биткоин-адрес для оплаты. Отправляем POST запрос в JSON формате.
Пример кода на PHP:
PHP:
<?php
$json_data = array (
"callback" => array(
'url'=> 'http://example.com/callback',
'data' => array (
'invoice_id' => "1234",
'secret' => "7j0ap91o99cxj8k9"
)
)
);
$wallet = "8e9c53a62755bcc66e4d2aaae3a2af6d";
$api_base = "https://apirone.com/api/v2/btc/wallet/". $wallet ."/address";
$curl = curl_init($api_base);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($json_data));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$http_status_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$response = curl_exec($curl);
curl_close($curl);
$decoded = json_decode($response, true);
echo "Please send the payment to the following bitcoin address: " .
$decoded["address"];
?>
В 'url'=> 'http://example.com/callback' меняем ссылку на адрес страницы для колбэка на своем сайта. Эта страница будет получать всю информацию о поступающих платежах.
'invoice_id' - сохраненный в БД номер заказа.
'secret' - придуманный вами секретный код, для доп. безопасности при получении данных от платежного сервиса.
$wallet - идентификатор кошелька с которым мы работаем
Для удобной оплаты с мобильного телефона, показываем QR код с биткоин-адресом,
PHP:
echo '<img src="https://apirone.com/api/v1/qr?message='. $decoded["address"] .'">' ;
Сумма оплаты может быть любая, так как платеж будет разделяться по процентам.
Обработка Callback
Страница колбэка нужна для приема данных о транзакции и выполнения бизнес логики при оплате. На эту страницу Биткоин-процессинг передает: адрес, сумму, хэш транзакции, количество подтверждений и данные которые мы указали: invoice_id и secret. Данные передаются POST запросом в формате JSON, так удобнее и безопаснее.
Для обработки нам нужен не сложный скрипт:
PHP:
<?php
$secret = "7j0ap91o99cxj8k9";
//receive JSON data
$data = file_get_contents('php://input');
if ($data) {
$params = json_decode($data, true);
// Проверяем секретный код
if ($params["data"]["secret"] !== $secret) die();
$url = $params["data"]["url"];
$logo = $params["data"]["logo"];
$input_address = $params["input_address"];
$value_in_satoshi = $params["value"];
// Если количество подтверждений ноль, то записываем данные в базу, но не выплачиваем
if ($params["confirmations"] == 0) {
// пишем данные о транзакции и
отмечаем статус инвойса - ожидание подтверждения оплаты
}
if ($params["confirmations"] >= 3) {
// транзакция три раза подтверждена в сети, отвечаем платежному серверу *ok* и ставим статус заказа - на выплату
echo "*ok*";
}
}
?>
Мы настоятельно рекомендуем делать выплату минимум после одного подтверждения в сети!
Выплата в Биткоинах. Backend сервер.
После подтверждения оплаты клиентом, нам нужно снова получить список получателей платежа и процентах. Затем создаем JSON запрос на выплату:
PHP:
<?php
$secret = "7j0ap91o99cxj8k9";
//receive JSON data
$data = file_get_contents('php://input');
if ($data) {
$params = json_decode($data, true);
// Проверяем секретный код
if ($params["data"]["secret"] !== $secret) die();
$url = $params["data"]["url"];
$logo = $params["data"]["logo"];
$input_address = $params["input_address"];
$value_in_satoshi = $params["value"];
// Если количество подтверждений ноль, то записываем данные в базу, но не выплачиваем
if ($params["confirmations"] == 0) {
// пишем данные о транзакции и
отмечаем статус инвойса - ожидание подтверждения оплаты
}
if ($params["confirmations"] >= 3) {
// транзакция три раза подтверждена в сети, отвечаем платежному серверу *ok* и ставим статус заказа - на выплату
echo "*ok*";
}
}
?>
Мы настоятельно рекомендуем делать выплату минимум после одного подтверждения в сети!
Выплата в Биткоинах. Backend сервер.
После подтверждения оплаты клиентом, нам нужно снова получить список получателей платежа и процентах. Затем создаем JSON запрос на выплату:
PHP:
<?php
$WalletID = "8e9c53a62755bcc66e4d2aaae3a2af6d";
$json_data = '{"transfer_key": "3847fud983d30d303ie093uj97"}' .
array (
'destinations' => array (
array('address' => "1apiKcJM95jENZeom2dQo8ShK7dUQkRaS", 'amount' => "52.57%"),
array('address' => "1ApiwpetcWnBbkpU7cb7biPfc6Tiucasf8", 'amount' => "47.43%")
)
);
$api_base = file_get_contents("https://apirone.com/api/v2/btc/wallet/" .
$WalletID . "/transfer");
$curl = curl_init($api_base);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($json_data));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$http_status_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$response = curl_exec($curl);
curl_close($curl);
$decoded = json_decode($response, true);
echo "Transaction hash: " . $decoded["txid"];
?>
Здесь мы формируем выплату на два биткоин-адреса в соответствующих пропорциях, без учета комиссии миксера, её вам следует добавить в список.
При этом комиссия платежного шлюза будет фиксированной и составляет всего 0.0002 BTC, независимо от суммы. Комиссия биткоин сети вычитается пропорционально от всей транзакции.
Привлечение Биткоин-инвесторов и реклама.
“Миксеру” необходимы оборотные средства, которые вы можете привлекать за счет инвесторов, делясь с ними частью прибыли. А для большего вовлечения аудитории в проект, вы можете добавить реферальную программу привлечения клиентов, скажем за каждого привлеченного клиента, мгновенная выплата.
Создайте систему бонусов для блогеров и активных участников соц. сетей, раздавая поощрения за активную рекламу. Скажем по несколько тысяч сатоши за каждое действие.
Вы можете быть хорошим организатором, продвинутым менеджером проекта или стартапером, чтобы запустить Биткоин-миксер. Ведь каждая идея достойна реализации!
Биткоин-кошельки дают только ощущение анонимности. При регистрации кошелька, генерируются новые адреса, без каких либо контактных данных, местоположении и информации о пользователе. Но Биткоин это псевдо-анонимная криптовалюта, в которой можно просмотреть всю историю транзакций и взаимодействие адресов через блокчейн-эксплорер.
Существуют несколько коммерческих сервисов деанонимизации кошельков. Они круглосуточно парсят информацию об участниках форумов, изучают горячие кошельки крупных бирж и обменников, мониторят движения инвестиций и теневой рынок. Таким образом собирается огромная база соответствий адрес - владелец, как узловые элементы в цепочке денег. По ним то и можно определить движение средств.
Принцип работы Биткоин миксера
Не все пользователи хотели бы показывать свои транзакции, например при оплате услуг индустрии для взрослых, крипто-голосований или покупки цифрового контента. Да и вообще, неприкосновенность частной личной жизни, персональных данных и финансов, в Европейских странах защищена законом.
Для того чтобы прервать или запутать цепочку транзакций созданы биткоин миксер (или тумблер). Главная цель процесса- полностью разорвать связь входящей оплаты и анонимной транзакции, поступившей на кошелек получателя платежа.
В данном процессе могут участвовать:
- предварительно смешанные монеты из различных источников
- промежуточное объединение монет
- рандомное разделение монет в разных пропорциях
- выплата одной или несколькими суммами
- разное время выплаты растянутое в несколько часов
- плавающая комиссия миксера и блокчейн сети
Подготовка к разработке
В этой статье мы не даем готового решения, которое можно скачать и поставить. Потому что логика смешивания и отдачи монет имеет огромное количество вариантов. Также можно распоряжаться не только своими биткоинами, а привлекать инвестиционные под процент или вообще обходиться только входящими монетами. В этой статье, мы лишь расскажем о ключевых возможностях реализации, методах приема платежей и распределения транзакций.
В целях безопасности, проект можно разделить на две части: главная страница и сервер выплаты (backend). В случае компрометации веб сервера, злоумышленник не будет иметь возможности получить доступ к денежным ресурсам миксера. Серверная часть будет принимать колбэк от платежного сервера, выполнять выплаты по таймеру и управлять капиталом сервиса.
Поднимать собственную Битоин ноду, держать отдельный мощный сервер и обслуживать его, довольно дорого и трудозатратно. Ведь ноде нужно минимум 200Гб жесткого диска, 2Гб ОЗУ и более менее приличный процессор. Гораздо удобнее использовать готовые API (Application Programming Interface).
Найдено несколько таких вариантов:
https://btcpayjungle.com/
https://www.blockchain.com/ru/api
https://bitpay.com/api
https://apirone.com/ru/docs/wallet
Возьмем готовое решение от Apirone. Здесь все входящие транзакции можно принимать абсолютно бесплатно. А в одной транзакции можно указать до 255 получателей и заплатить фиксированную комиссию, всего 0.0002 BTC ($0.7). Такой сервис идеально подходит для нашего Миксера. Его легко масштабировать и быстро разворачивать на любом сервере. К тому же не требуется отправлять документы и деанонимизировать себя.
Кошельки полностью анонимные, а создавать их можно сколько угодно, без ограничений.
Для хранения чистых Биткоинов нам потребуется Saving (накопительный) кошелек. Создаем его простым POST запросом в JSON формате: {"type": "saving"} на эндпоинт
https://apirone.com/api/v2/btc/wallet
В ответ получаем результат в JSON формате:
PHP:
{
"wallet": "8e9c53a62755bcc66e4d2aaae3a2af6d",
"type": "saving",
"transfer_key": "7j0ap91o99cxj8k97j0ap91o99cxj8k9",
"currency": "btc"
}
wallet - идентификатор созданного кошелька.
transfer_key - ключ для создания выплат и управления кошельком.
Главная страница
На главной странице мы поместим возможность оплатить одному или сразу нескольким получателям в разных процентных пропорциях, а также дадим возможность выбрать сервисный сбор самостоятельно.
По нажатию на кнопку Продолжить, адреса и соответветствующие проценты сохраняются как заказ, в базе данных.
Для нашего уже имеющегося кошелька, создаем новый биткоин-адрес для оплаты. Отправляем POST запрос в JSON формате.
Пример кода на PHP:
PHP:
<?php
$json_data = array (
"callback" => array(
'url'=> 'http://example.com/callback',
'data' => array (
'invoice_id' => "1234",
'secret' => "7j0ap91o99cxj8k9"
)
)
);
$wallet = "8e9c53a62755bcc66e4d2aaae3a2af6d";
$api_base = "https://apirone.com/api/v2/btc/wallet/". $wallet ."/address";
$curl = curl_init($api_base);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($json_data));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$http_status_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$response = curl_exec($curl);
curl_close($curl);
$decoded = json_decode($response, true);
echo "Please send the payment to the following bitcoin address: " .
$decoded["address"];
?>
В 'url'=> 'http://example.com/callback' меняем ссылку на адрес страницы для колбэка на своем сайта. Эта страница будет получать всю информацию о поступающих платежах.
'invoice_id' - сохраненный в БД номер заказа.
'secret' - придуманный вами секретный код, для доп. безопасности при получении данных от платежного сервиса.
$wallet - идентификатор кошелька с которым мы работаем
Для удобной оплаты с мобильного телефона, показываем QR код с биткоин-адресом,
PHP:
echo '<img src="https://apirone.com/api/v1/qr?message='. $decoded["address"] .'">' ;
Сумма оплаты может быть любая, так как платеж будет разделяться по процентам.
Обработка Callback
Страница колбэка нужна для приема данных о транзакции и выполнения бизнес логики при оплате. На эту страницу Биткоин-процессинг передает: адрес, сумму, хэш транзакции, количество подтверждений и данные которые мы указали: invoice_id и secret. Данные передаются POST запросом в формате JSON, так удобнее и безопаснее.
Для обработки нам нужен не сложный скрипт:
PHP:
<?php
$secret = "7j0ap91o99cxj8k9";
//receive JSON data
$data = file_get_contents('php://input');
if ($data) {
$params = json_decode($data, true);
// Проверяем секретный код
if ($params["data"]["secret"] !== $secret) die();
$url = $params["data"]["url"];
$logo = $params["data"]["logo"];
$input_address = $params["input_address"];
$value_in_satoshi = $params["value"];
// Если количество подтверждений ноль, то записываем данные в базу, но не выплачиваем
if ($params["confirmations"] == 0) {
// пишем данные о транзакции и
отмечаем статус инвойса - ожидание подтверждения оплаты
}
if ($params["confirmations"] >= 3) {
// транзакция три раза подтверждена в сети, отвечаем платежному серверу *ok* и ставим статус заказа - на выплату
echo "*ok*";
}
}
?>
Мы настоятельно рекомендуем делать выплату минимум после одного подтверждения в сети!
Выплата в Биткоинах. Backend сервер.
После подтверждения оплаты клиентом, нам нужно снова получить список получателей платежа и процентах. Затем создаем JSON запрос на выплату:
PHP:
<?php
$secret = "7j0ap91o99cxj8k9";
//receive JSON data
$data = file_get_contents('php://input');
if ($data) {
$params = json_decode($data, true);
// Проверяем секретный код
if ($params["data"]["secret"] !== $secret) die();
$url = $params["data"]["url"];
$logo = $params["data"]["logo"];
$input_address = $params["input_address"];
$value_in_satoshi = $params["value"];
// Если количество подтверждений ноль, то записываем данные в базу, но не выплачиваем
if ($params["confirmations"] == 0) {
// пишем данные о транзакции и
отмечаем статус инвойса - ожидание подтверждения оплаты
}
if ($params["confirmations"] >= 3) {
// транзакция три раза подтверждена в сети, отвечаем платежному серверу *ok* и ставим статус заказа - на выплату
echo "*ok*";
}
}
?>
Мы настоятельно рекомендуем делать выплату минимум после одного подтверждения в сети!
Выплата в Биткоинах. Backend сервер.
После подтверждения оплаты клиентом, нам нужно снова получить список получателей платежа и процентах. Затем создаем JSON запрос на выплату:
PHP:
<?php
$WalletID = "8e9c53a62755bcc66e4d2aaae3a2af6d";
$json_data = '{"transfer_key": "3847fud983d30d303ie093uj97"}' .
array (
'destinations' => array (
array('address' => "1apiKcJM95jENZeom2dQo8ShK7dUQkRaS", 'amount' => "52.57%"),
array('address' => "1ApiwpetcWnBbkpU7cb7biPfc6Tiucasf8", 'amount' => "47.43%")
)
);
$api_base = file_get_contents("https://apirone.com/api/v2/btc/wallet/" .
$WalletID . "/transfer");
$curl = curl_init($api_base);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($json_data));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$http_status_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$response = curl_exec($curl);
curl_close($curl);
$decoded = json_decode($response, true);
echo "Transaction hash: " . $decoded["txid"];
?>
Здесь мы формируем выплату на два биткоин-адреса в соответствующих пропорциях, без учета комиссии миксера, её вам следует добавить в список.
При этом комиссия платежного шлюза будет фиксированной и составляет всего 0.0002 BTC, независимо от суммы. Комиссия биткоин сети вычитается пропорционально от всей транзакции.
Привлечение Биткоин-инвесторов и реклама.
“Миксеру” необходимы оборотные средства, которые вы можете привлекать за счет инвесторов, делясь с ними частью прибыли. А для большего вовлечения аудитории в проект, вы можете добавить реферальную программу привлечения клиентов, скажем за каждого привлеченного клиента, мгновенная выплата.
Создайте систему бонусов для блогеров и активных участников соц. сетей, раздавая поощрения за активную рекламу. Скажем по несколько тысяч сатоши за каждое действие.
Вы можете быть хорошим организатором, продвинутым менеджером проекта или стартапером, чтобы запустить Биткоин-миксер. Ведь каждая идея достойна реализации!