Як створити власний сервер API для Bitcoin за допомогою Flask

Готові підняти свої навички розробки з Bitcoin на новий рівень? Створення власного серверу API для Bitcoin — це захоплюючий спосіб взаємодіяти з мережею Bitcoin програмно. Незалежно від того, чи створюєте ви сервіс для гаманців, оглядач блокчейн або кастомний додаток для Bitcoin, створення серверу API дає вам повний контроль над тим, як ви взаємодієте з мережею Bitcoin.

pic

Створіть власний API для Bitcoin

У цій статті я проведу вас через процес створення серверу API для Bitcoin за допомогою Flask, легкого та потужного фреймворку для веб-розробки на Python. Наприкінці цього посібника ви отримаєте повнофункціональний сервер API, який може створювати гаманці, генерувати адреси, надсилати транзакції та багато іншого!

Чому варто створювати сервер API для Bitcoin?

Перш ніж зануритись у код, давайте поговоримо про те, чому вам може бути цікаво створити власний сервер API для Bitcoin:

  1. Налаштування під себе: Налаштуйте API відповідно до ваших конкретних потреб, будь то для гаманця, платіжного шлюзу або оглядача блокчейну.
  2. Конфіденційність: Залишайте свої взаємодії з Bitcoin конфіденційними, розміщуючи свій сервер.
  3. Навчання: Отримайте глибше розуміння того, як працює Bitcoin зсередини.
  4. Масштабованість: Створіть основу для більш складних додатків, що базуються на 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

pic

перевірка версії

Використовуючи улюблений пакетний менеджер 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")
RPC
USER = config("RPCUSER", default="satoshi")
RPC
PASS = config("RPCPASS")
RPC
HOST = config("RPCHOST", default="127.0.0.1")
RPC
PORT = config("RPCPORT", default="8332")
DEBUG
MODE = 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

pic

Додаток працює — зверніть увагу, що я використовую 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

pic

Приклад отримання інформації про блокчейн

Висновок

Вітаємо! Ви щойно побудували власний сервер 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

Leave a Reply

Your email address will not be published. Required fields are marked *