Інтеграція з Mysterium Network
Конкретна ситуація: ви будуєте приложение, якому потрібен децентралізований VPN або residential proxy — без єдиного провайдера, без KYC на користувачів, з оплатою в крипте. Mysterium Network — це p2p мережа з ~13k нод, де будь-хто може продавати трафік за MYST токени. Для розробника задача не в тому, щоб "підключитися до VPN", а в тому, щоб вбудувати Mysterium у своє приложение як програмований транспортний шар.
Архітектура Mysterium: що під капотом
Mysterium працює поверх кількох протоколів:
- Wireguard — основний протокол для VPN-підключень (UDP, швидкий, широко підтримується)
- OpenVPN — legacy, підтримується для сумісності
- NATS — брокер сообщений для discovery й signaling між нодами
- Hermes — payment settlement смарт-контракт на Polygon (раніше на Ethereum)
Ключовий компонент для розробника — mysterium-vpn-js SDK (TypeScript) і myst-provider API (REST HTTP сервер, який запускається з нодою).
Програмна робота з Mysterium через SDK
Запуск й підключення до ноди
import { TequilapiClientFactory, NodeHttpTransport } from "mysterium-vpn-js";
const factory = new TequilapiClientFactory(
"http://127.0.0.1:4050", // tequilapi — REST API ноди
5000 // timeout ms
);
const api = factory.build(NodeHttpTransport());
// Перевірка стану ноди
const nodeInfo = await api.healthCheck();
console.log("Node version:", nodeInfo.version);
// Список доступних провайдерів (вибірка з Discovery)
const proposals = await api.findProposals({
serviceType: "wireguard", // або "openvpn"
qualityMin: 0.9, // фільтр по quality score (0-1)
locationCountry: "DE", // країна exit ноди
});
Створення й управління сесією
// Identity — ваш "гаманець" у мережі Mysterium
const identities = await api.identityList();
if (identities.length === 0) {
const identity = await api.identityCreate("your_passphrase");
await api.identityRegister(identity.id, {
token: undefined, // referral token опціональний
});
}
const identity = identities[0];
// Переконуємося що identity зареєстрований on-chain
const status = await api.identityStatus(identity.id);
if (status.registrationStatus !== "Registered") {
// Потрібно поповнити баланс MYST для оплати реєстрації
throw new Error("Identity not registered");
}
// Підключення до вибраного провайдера
const connection = await api.connectionCreate({
consumerId: identity.id,
providerId: proposals[0].providerId,
serviceType: "wireguard",
connectOptions: {
dnsOption: "auto", // або конкретний DNS сервер
}
});
console.log("Session ID:", connection.sessionId);
console.log("Status:", connection.status); // "Connected"
Моніторинг сесії й статистика
// Поточний стан підключення
const stats = await api.connectionStatistics();
console.log({
bytesSent: stats.bytesSent,
bytesReceived: stats.bytesReceived,
tokensSpent: stats.tokensSpent, // потрачено MYST
duration: stats.duration, // секунди
});
// Поточний IP (для верифікації що трафік йде через ноду)
const location = await api.connectionLocation();
console.log("Exit IP:", location.ip, "Country:", location.country);
// Відключення
await api.connectionCancel();
Payment інтеграція: MYST на Polygon
Mysterium використовує payment channels через Hermes контракт на Polygon. Це не прямі on-chain транзакції за кожен мегабайт — off-chain micropayments з періодичним settlement.
Поповнення баланса
// Отримати адресу для поповнення баланса consumer identity
const channelAddress = await api.paymentOrderGetChannelAddress(
identity.id
);
// channelAddress — це Polygon адреса, на неї відправляємо MYST
// Створення order через вбудований шлюз (якщо on-ramp через карту)
const order = await api.paymentOrderCreate(identity.id, {
mystAmount: "10.0",
payCurrency: "USD",
gateway: "coingate", // або "paypal"
country: "US",
callerData: "{}",
});
console.log("Payment URL:", order.publicGatewayData.paymentUrl);
Для programmatic use case (ваше приложение само поповнює балансы користувачів) — прямий transfer MYST на Polygon через ethers.js:
import { ethers } from "ethers";
const MYST_POLYGON = "0x1379e8886a0d08c7902c843f5c6353d3e8e99a18";
const mystContract = new ethers.Contract(MYST_POLYGON, ERC20_ABI, signer);
// channelAddress з api.paymentOrderGetChannelAddress()
await mystContract.transfer(channelAddress, ethers.parseUnits("10", 18));
Власний Discovery Service
За замовчуванням Mysterium node використовує централізований Discovery сервіс Mysterium Foundation для пошуку провайдерів. Для enterprise використання або приватної мережі — потрібен свій Discovery.
Mysterium використовує NATS як discovery брокер. Можна розгорнути self-hosted:
# docker-compose.yml для self-hosted discovery
version: '3.8'
services:
nats:
image: nats:2.9-alpine
ports:
- "4222:4222"
- "8222:8222" # monitoring
command: "--jetstream --cluster_name mysterium-private"
discovery:
image: mysteriumnetwork/discovery:latest
environment:
- NATS_URL=nats://nats:4222
- BROKER_ADDRESS=nats://nats:4222
depends_on:
- nats
Ноди у вашій приватній мережі конфігурруються з --discovery.address указуючим на ваш NATS.
Типові сценарії застосування
Decentralized proxy для web scraping замість rotating residential proxies від Oxylabs/Brightdata, використовуєте Mysterium ноди. Вартість у 3–10x нижча, але надійність варіюється (p2p мережа ≠ enterprise SLA).
Privacy-preserving API виклики мобільне приложение робить запити до зовнішніх API через Mysterium, приховуючи IP користувача від сервісу призначення.
Geo-distributed тестування тестування приложения з різних геолокацій програмно, без оренди VPS у кожному регіоні.
Обмеження, які потрібно враховувати: Mysterium не дає гарантій bandwidth або uptime від конкретної ноди. Для приложений з вимогами до latency <100ms — p2p VPN не оптимальний вибір. Потрібен fallback механізм й логіка переключення між провайдерами.
Базова інтеграція через mysterium-vpn-js у існуючое приложение: 2–3 тижні. Повна з біллінгом, нодою під управлінням вашого бекенду й custom discovery: 6–10 тижнів.







