Готові підняти свої навички розробки з Bitcoin на новий рівень? Створення власного серверу API для Bitcoin — це захоплюючий спосіб взаємодіяти з мережею Bitcoin програмно. Незалежно від того, чи створюєте ви сервіс для гаманців, оглядач блокчейн або кастомний додаток для Bitcoin, створення серверу API дає вам повний контроль над тим, як ви взаємодієте з мережею Bitcoin.
Створіть власний API для Bitcoin
У цій статті я проведу вас через процес створення серверу API для Bitcoin за допомогою Flask, легкого та потужного фреймворку для веб-розробки на Python. Наприкінці цього посібника ви отримаєте повнофункціональний сервер API, який може створювати гаманці, генерувати адреси, надсилати транзакції та багато іншого!
Чому варто створювати сервер API для Bitcoin?
Перш ніж зануритись у код, давайте поговоримо про те, чому вам може бути цікаво створити власний сервер API для Bitcoin:
- Налаштування під себе: Налаштуйте API відповідно до ваших конкретних потреб, будь то для гаманця, платіжного шлюзу або оглядача блокчейну.
- Конфіденційність: Залишайте свої взаємодії з Bitcoin конфіденційними, розміщуючи свій сервер.
- Навчання: Отримайте глибше розуміння того, як працює Bitcoin зсередини.
- Масштабованість: Створіть основу для більш складних додатків, що базуються на Bitcoin.
Що вам потрібно
Щоб слідувати посібнику, вам знадобиться:
- Робочий вузол Bitcoin Core (на основній мережі, тестовій мережі або в режимі regtest).
- Python 3.8+, встановлений на вашій машині.
- Базові знання Python і Flask.
- Бібліотеки, такі як
flask
,flask-limiter
,python-decouple
таpython-bitcoinrpc
.
Крок 1: Налаштуйте ваш Bitcoin Core вузол
Перш ніж створювати сервер API, переконайтесь, що ваш вузол Bitcoin Core працює та доступний.
Якщо ви ще не налаштували вузол, перегляньте мою попередню статтю про Як налаштувати та запустити Bitcoin вузол у режимі regtest за допомогою Linode.
Після того, як ваш вузол запущений, почнемо створювати API.
Крок 2: Підготовка середовища Python
На вашому сервері або розробницькому комп’ютері встановіть Python, якщо це ще не було зроблено.
Для установки Python і його версій відвідайте https://www.python.org/downloads/.
Перевірте версію Python:
python3 --version
перевірка версії
Використовуючи улюблений пакетний менеджер Python, встановіть необхідні бібліотеки (я використовую uv, для більшого доступу дивіться на pip).
mkdir my_btc_api
cd my_btc_api
pip install Flask flask-limiter python-decouple python-bitcoinrpc flask-cors
Крок 3: Створення серверу API на Flask
Ось повний код для вашого серверу API для Bitcoin. Я поясню кожен крок.
1. Налаштуйте змінні для Flask
На локальному вузлі, який працює в режимі regtest, як описано в Як налаштувати та запустити Bitcoin вузол у режимі regtest за допомогою Linode, налаштуйте змінні .env:
nano .env
RPC_USER = "satoshi"
RPC_PASS = "my_safe_pass"
RPC_HOST = "127.0.0.1"
RPC_PORT = 18443
Якщо ваш вузол знаходиться в іншому місці (IP), має інший порт чи іншу систему автентифікації, ви можете відредагувати їх відповідно.
2. Редагуємо ваш API python файл
nano btc-api.py
3. Імпортуйте необхідні бібліотеки
from flask import Flask, request, jsonify
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException
from decouple import config
import logging
import ipaddress
from urllib.parse import quote
from flask_cors import CORS
## Налаштування Flask додатку
app = Flask(name)
CORS(app)
Налаштування
APIKEY = config("TESTAPIKEY")
RPCUSER = config("RPCUSER", default="satoshi")
RPCPASS = config("RPCPASS")
RPCHOST = config("RPCHOST", default="127.0.0.1")
RPCPORT = config("RPCPORT", default="8332")
DEBUGMODE = config("DEBUG_MODE", default=False, cast=bool)
Налаштування логування
logging.basicConfig(
level=logging.DEBUG, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
```
Примітки:
CORS було додано для уникнення проблем з запитами з інших доменів, які можуть виникнути на етапі інтеграції.
Рівень DEBUG призначений для розробки та навчання, не соромтеся видаляти або налаштовувати його відповідно до ваших потреб.
5. Ініціалізація RPC з'єднання з Bitcoin
Налаштуйте функцію для підключення через RPC
def get_rpc_connection(wallet_name=None):
try:
port = int(RPC_PORT)
except ValueError:
logging.error(f"Невірне значення RPC_PORT: {RPC_PORT}. Використовуємо порт за замовчуванням.")
port = 18443
encoded_password = quote(RPC_PASS, safe="")
if wallet_name:
rpc_url = f"http://{RPC_USER}:{encoded_password}@{RPC_HOST}:{port}/wallet/{wallet_name}"
else:
rpc_url = f"http://{RPC_USER}:{encoded_password}@{RPC_HOST}:{port}"
return AuthServiceProxy(rpc_url)
6. Додайте обмеження по кількості запитів
Якщо ви будете відкривати свій сервер для зовнішніх з’єднань, розгляньте можливість додавання деякої безпеки для уникнення перевантажень (і витрат).
Тут ми додамо обмеження в 10 запитів на хвилину для кожного IP.
limiter = Limiter(
get_remote_address,
app=app,
default_limits=["10 per minute"],
storage_uri="memory://",
)
7. Створення точок доступу API
Ось кілька точок доступу, які ви можете реалізувати:
- Отримати інформацію про блокчейн
@app.route("/getblockchaininfo", methods=["GET"])
@requires_auth
def get_blockchain_info():
try:
rpc = get_rpc_connection()
info = rpc.getblockchaininfo()
return jsonify(info)
except JSONRPCException as e:
return jsonify({"error": str(e)}), 500
- Створити гаманець
@app.route("/create_wallet", methods=["POST"])
@requires_auth
def create_wallet():
data = request.get_json()
wallet_name = data.get("wallet_name")
if not wallet_name:
return jsonify({"error": "Ім’я гаманця є обов'язковим"}), 400
try:
rpc = get_rpc_connection()
rpc.createwallet(wallet_name)
return jsonify({"message": f"Гаманець {wallet_name} успішно створено"})
except JSONRPCException as e:
return jsonify({"error": str(e)}), 500
- Згенерувати нову адресу
@app.route("/generate_address", methods=["POST"])
@requires_auth
def generate_address():
data = request.get_json()
wallet_name = data.get("wallet_name")
if not wallet_name:
return jsonify({"error": "Ім’я гаманця є обов'язковим"}), 400
try:
rpc = get_rpc_connection(wallet_name)
address = rpc.getnewaddress()
return jsonify({"address": address})
except JSONRPCException as e:
return jsonify({"error": str(e)}), 500
- Надіслати транзакцію
@app.route("/send_transaction", methods=["POST"])
@requires_auth
def send_transaction():
data = request.get_json()
wallet_name = data.get("wallet_name")
to_address = data.get("to_address")
amount = data.get("amount")
if not wallet_name or not to_address or not amount:
return jsonify({"error": "Ім’я гаманця, адреса отримувача та сума є обов'язковими"}), 400
try:
rpc = get_rpc_connection(wallet_name)
txid = rpc.sendtoaddress(to_address, amount)
return jsonify({"txid": txid})
except JSONRPCException as e:
return jsonify({"error": str(e)}), 500
Не забудьте, що для виконання операції з транзакцією необхідні кошти.
Крок 4: Запуск серверу API
Тепер для запуску серверу API виконайте команду:
python3 btc-api.py
Додаток працює — зверніть увагу, що я використовую uv
Крок 5: Тестування вашого API
Використовуйте інструменти, такі як Postman або cURL, для тестування точок доступу вашого API.
Наприклад:
- Створення гаманця:
curl -X POST http://localhost:5000/create_wallet -H "Content-Type: application/json" -d '{"wallet_name": "mywallet"}'
- Генерація адреси:
curl -X POST http://localhost:5000/generate_address -H "Content-Type: application/json" -d '{"wallet_name": "mywallet"}'
- Отримання інформації про блокчейн:
curl -X GET http://localhost:5000/getblockchaininfo
Приклад отримання інформації про блокчейн
Висновок
Вітаємо! Ви щойно побудували власний сервер API для Bitcoin, використовуючи Flask. Це потужна основа для створення додатків на базі Bitcoin, і можливості безмежні. Ви можете розширити цей сервер додатковими кінцевими точками (endpoints), додати аутентифікацію або навіть розгорнути його в хмарі для публічного доступу (не забудьте про WSGI).
Тепер ваша черга експериментувати та створювати щось неймовірне. Удачі в програмуванні! 🚀
Примітка:
Цей контент є частиною інтерактивної освіти, організованої https://nearx.com.br/ у рамках програми Dojo.
Ця стаття була створена завдяки діяльності групи Shi(し) Satoshi.
https://github.com/robdicoco (я)
https://github.com/Edugera
https://github.com/alfatektecnologia
Перекладено з: How to Create Your Own Bitcoin API Server Using Flask