Посібник

Опис

Twister

Twister — децентралізована пірингова платформа мікроблогів, створена Miguel Freitas у червні, 2013.

Для початку користування, не потрібно жодних вхідних капіталів та інших вимог, що відрізняють платформу на фоні інших децентралізованих рішень. Мережа twister створена, щоб бути доступною для кожного без обмежень та звідусіль, в незалежності від географії користувача.

Роботоздатність інфраструктури забезпечується іншими вузлами, зокрема тих, які рекламують свої послуги шляхом майнінгу блоків, та провайдерів DNS, хто сканує та поширює актуальні вузли для підключення нових.

Користувацький контент зберігається перманентно між користувачами, які читають один одного, тому для доступності дописів, публікатору не потрібне постійне підключення до мережі інтернет (за схожим принципом працює протокол IPFS, утім twister використовує незалежну екосистему власної реалізації). Сховище даних не цензурується, не може бути заблоковане чи видалене третьою стороною, оскільки кожен учасник мережі — є частиною суспільної бази даних. Термін зберігання контенту обмежується лише вашим часом перебування в мережі та перебуванням в мережі ваших читачів.

Для отримання більш детальної інформації стосовно технічної концепції twister, будь ласка, ознайомтесь з оригінальним документом Whitepaper.

Згідно Анонсу, 25 червня 2020 року, офіційна підтримка проекту була припинена автором, утім Мережа twister все ще активна, оскільки для функціонування не потребує централізованих ресурсів.

Twisterarmy

Twisterarmy — некомерційна організація, заснована на початку 2021 року кількома користувачами з наміром підтримувати та розвивати проект twister у форматі спільноти.

Ресурси нашої спільноти включать багато незалежних рішень, форків від багатьох розробників суміжних рішень: колекції програмного забезпечення для аналітики, хмарних сервісів та інших концепцій, які можуть бути реалізовані довкола екосистеми twister. Зокрема, спільнота Twisterarmy веде власну редакцію програмних продуктів twister-core, twister-html, twister-seeder та інших продуктів, що включають останні офіційні оновлення, утім мають власні доповнення — колекції тем оформлення, кращу підтримку сучасних медіа-форматів та актуальних DNS сервісів для забезпечення більш стабільної роботи. Щоб отримати більше інформації щодо практичної діяльності спільноти, будь ласка, завітайте до нашого проекту на GitHub.

Мета нашої організації — збереження та підтримка інструментів для вільного спілкування, надаючи людям змогу спілкуватися з будь якого куточку планети без обмежень та цензури, а кодову базу — забезпечити актуальними оновленнями.

Якщо ви маєте будь-які пропозиції стосовно доповнення ресурсів, виправлення помилок, перекладу цього сайту — будь ласка, напишіть повідомлення до офіційного аккаунту спільноти @twisterarmy

Будуймо свободу разом ♡

Початок роботи

Огляд

Наразі доступні декілька версій програмного забезпечення: Офіційна та редакція Twisterarmy. Ми рекомендуємо обрати останню, оскільки вона є повністю сумісною з мережею twister, включає нову функціональність а також містить останні офіційні оновлення. Ви можете ознайомитись з подробицями на сторінці обраного релізу.

Технічні вимоги

  • Архітектури: amd64, ARM
  • Мінімальна частота: 500МГц
  • Оперативна пам’ять: 1024 Мб
  • Дисковий простір: 2048 Мб
  • Канал зв’язку: залежить від активності мережі, на даний момент становить близько 2 Гб на місяць.

Встановлення

На даний момент, доступні зкомпільовані пакети для операційних систем сімейства Debian/Linux, з підтримкою процесорів amd64 та armhf.

Щоб завантажити необхідну версію, будь ласка, завітайте на сторінку Встановлення.

Зкомпільовані бінарні пакети містять все необхідне для запуску вузла twister на персональному комп’ютері.

Приклад встановлення завантаженого пакету:

          sudo dpkg -i twister.deb
        

Після встановлення, додаток twister буде доступний в меню програм. Запуск twister також може бути ініційований через командний термінал.

Веб застосунок відкриється автоматично у браузері, що використовується системою, як стандартний. Якщо цього не сталось, просто відкрийте наступну адресу URL: http://localhost:28332

Видалення

Повністю видалити застосунок twister можна засобами графічного пакетного менеджеру або виконавши команду:

          sudo apt remove twister
        

Компіляція

Кращим способом користуватися вільним програмним забезпеченням є компіляція його з первинного коду.

Тим не менше, для спрощення процесу, ми рекомендуємо нашу розробку Twister CLI Installer, за допомогою якої, ви зможете відповідаючи на прості питання встановити та безпечно налаштувати twister як на персональному комп’ютері, так і на віддаленому сервері.

У разі, якщо бажаєте контролювати процес компіляції особисто, або змінити первинний код під специфічні потреби, слідуйте за посиланнями на інструкції, що додані до кожного з продуктів у розділі Компіляція з початкового коду.

Ручна компіляція полягає у встановленні щонайменше twister-core для серверу та twister-html у якості веб-клієнту.

Альтернативні рішення

Якщо ви маєте обмежені апаратні ресурси або проблеми з підключенням, надаєте перевагу смартфонам або маєте обмежений запас батареї на ноутбукі, зверніть увагу на Хмарні рішення, де не потрібне встановлення жодного програмного забезпечення локально, а мережею twister можна користуватися за допомогою веб-сайту провайдера.

Розробка

Командний інтерфейс

          twisterd [options]
          twisterd [options] command [params]    Надіслати команду до -server або twisterd
          twisterd [options] help                Список доступних команд
          twisterd [options] help command        Отримати довідку по command
        

Опції

          -?                                     Дане інформаційне повідомлення
          -conf=file                             Оголошення файлу конфігурації (стандартно: ~/.twister/twister.conf)
          -pid=file                              Вказати pid файлу (стандартно: twisterd.pid)
          -gen                                   Генерація монет (стандартно: 0)
          -datadir=dir                           Вказати директорію даних
          -htmldir=dir                           Вказати директорію HTML (стандартно: data/html)
          -dbcache=n                             Вказати розмір кешу бази даних в мегабайтах (стандартно: 25)
          -timeout=n                             Вказати тайм-аут з’єднання в мілісекундах (стандартно: 5000)
          -proxy=ip:port                         Приєднатися до проксі
          -socks=n                               Обрати версію сокету (4-5, стандартно: 5)
          -tor=ip:port                           Використовувати проксі для доступу TOR (стандартно: same as -proxy)
          -dns                                   Дозволити пошук DNS для -addnode, -seednode і -connect
          -port=port                             Слухати підключення на порті (стандартно: 28333 or testnet: 18333)
          -maxconnections=n                      Максимальна кількість підключень до пірів (стандартно: 125)
          -addnode=ip                            Додати вузол для підключення та утримувати з’єднання активним
          -connect=ip                            Приєднатися тільки до вказаного вузла
          -seednode=ip                           Приєднатися до вказаного вузла, отримати адреси пірів та від’єднатись
          -externalip=ip                         Вказати власний публічну IP адресу
          -onlynet=net                           Приєднатися тільки до вузлів IPv4, IPv6 або Tor
          -multiconnperip                        Дозволити мульти-з’єднання libtorrent (стандартно: 0)
          -discover                              Віднайти власну IP адресу (стандартно: 1 на прослуховуванні та за умови -externalip)
          -checkpoints                           Приймати тільки блоки, що відповідають вбудованим checkpoints (стандартно: 1)
          -listen                                Отримувати підключення із-зовні (стандартно: 1 якщо -proxy або -connect)
          -bind=addr                             Приєднайтеся до вказаної адреси і завжди слухайте її. Використовуйте [host]:port позначення для IPv6
          -dnsseed                               Знайти пірів використовуючи пошук DNS (стандартно: 1 за вийнятком -connect)
          -banscore=n                            Порогове значення для відключення вузлів, які погано працюють (стандартно: 100)
          -bantime=n                             Кількість секунд, протягом яких вузли, які погано працюють, не підключаються знову (стандартно: 86400)
          -maxreceivebuffer=n                    Максимальний буфер отримання на з’єднання, n*1000 байтів (стандартно: 5000)
          -maxsendbuffer=n                       Мінімальний буфер отримання на з’єднання, n*1000 байтів (стандартно: 1000)
          -upnp                                  Використовувати UPnP щоб відобразити порт, який прослуховування (стандартно: 1 коли прослуховується listening)
          -paytxfee=amt                          Комісія за кілобайт для додавання до трансакцій, які ви надсилаєте
          -testnet                               Використовувати тестову мережу
          -debug                                 Вивести додаткову інформацію про налагодження. Мається на увазі параметри -debug*
          -debugnet                              Вивести додаткову інформацію про налагодження мережі
          -logtimestamps                         Додати мітку часу в інформацію про налагодження
          -shrinkdebugfile                       Стиснути файл debug.log під час запуску (стандартно: 1 коли не вказано -debug)
          -printtoconsole                        Відобразити інформацію про трасування в консоль замість файлу debug.log
          -regtest                               Увійти в режим регресійного тесту, який використовує спеціальний ланцюжок, у якому блоки можна розв’язувати миттєво. Це призначено для інструментів регресійного тестування та розробки програм.
          -rpcuser=user                          Логін для з’єднань JSON-RPC
          -rpcpassword=pw                        Пароль для з’єднань JSON-RPC
          -rpcport=port                          Вказати порт для з’єднань JSON-RPC (стандартно: 28332 або testnet: 18332)
          -rpcallowip=ip                         Обмежити підключення через JSON-RPC для заданої IP адреси
          -rpcconnect=ip                         Надіслати команди до вузла, який працює за адресою ip (стандартно: 127.0.0.1)
          -rpcthreads=n                          Вказати кількість потоків для сервісу викликів RPC (стандартно: 10)
          -public_server_mode                    Обмежити виконання JSON-RPC тільки для публічно-безпечних команд.
          -blocknotify=cmd                       Виконати команду при зміні блоку (%s в команді замінюється хешем блоку)
          -walletnotify=cmd                      Виконати команду при зміні транзакції у гаманці / обліковому записі (%s в команді змінюється на TxID)
          -alertnotify=cmd                       Виконати команду на отриманні релевантного сповіщення (%s в команді змінюється на повідомлення)
          -upgradewallet                         Оновити гаманець / обліковий запис до останнього формату
          -keypool=n                             Встановити розмір ключа в пулі на n (стандартно: 100)
          -rescan                                Пересканувати ланцюг блоків на наявність загублених транзакцій
          -salvagewallet                         Спроба відновити приватні ключі з пошкодженого файлу twisterwallet.dat
          -checkblocks=n                         Скільки блоків перевіряти при запуску (стандартно: 500, 0 = усі)
          -checklevel=n                          Наскільки ретельна перевірка блоків (0-4, стандартно: 3)
          -txindex                               Обслуговувати повний індекс транзакцій (стандартно: 0)
          -loadblock=file                        Імпортувати блоки із зовнішнього файлу blk000??.dat
          -reindex                               Перебудувати індекс ланцюга блоків з файлу blk000??.dat
          -par=n                                 Встановити кількість потоків скрипта верифікації (до 16, 0 = автоматично, 0 = наявно ядер, стандартно: 0)

          -blockminsize=n                        Встановити мінімальний розмір блоку в байтах (стандартно: 0)
          -blockmaxsize=n                        Встановити максимальний розмір блоку в байтах (стандартно: 250000)
          -blockprioritysize=n                   Встановити максимальний розмір транзакцій з високим пріоритетом / низькою платою в байтах (стандартно: 27000)

          -rpcssl                                Використовувати OpenSSL (https) для з’єднань JSON-RPC
          -rpcsslcertificatechainfile=file.cert  Файл сертифікату (стандартно: server.cert)
          -rpcsslprivatekeyfile=file.pem         Файл ключа (стандартно: server.pem)
          -rpcsslciphers=ciphers                 Прийнятні шифри (стандартно: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
        

JSON-RPC/API

Данні JSON повинні бути в кодуванні UTF-8.

Перш, ніж використовувати інтерфейс, необхідно створити файл конфігурації в директорії профілю.

Для UNIX-подібних платформ, стандартний шлях до файлу наступний: ~/.twister/twister.conf

          rpcuser=username
          rpcpassword=password
          rpcsslcertificatechainfile=шлях до файлу сертифікату (опціонально, якщо використовується з’єднання SSL)
          rpcsslprivatekeyfile=шлях до файлу ключа (опціонально, якщо використовується з’єднання SSL)
          rpcallowip=192.168.0.* щоб обмежити з’єднання тільки з локального хосту (0.0.0.0 або * t щоб дозволити усі з’єднання)
        

* Використовуючи twister-cli-installer, файл конфігурації буде створено автоматично, відповідно до вимог.

Список викликів

          twisterd help
        

Приклади коду

PHP

cloud-server — Хмарна платформа, з підтримкою мульти-аккаунтів, дозволяє працювати з мережею twister віддалено через веб-інтерфейс.

DNS сервіс

Огляд

Мережа twister вимагає декілька службових серверів DNS (seeders) які здійснюють пошук та надають актуальний список адресів для підключення нового вузла. Якщо у вашому розпоряджені linux сервер, доступний 24×7 та ви маєте змогу додати NS записи до власного домену, долучайтеся до списку вузлів DNS.

У прикладах нижче буде розглянуто процес налаштування на прикладі демонстраційних доменів першого рівня: domainseed.tk, domaindns1.tk, domaindns2.tk та у якості альтернативи - субдоменів seed.domain.org, ns1.domain.org, ns2.domain.org.

Встановлення

Наразі встановлення доступне тільки шляхом компіляції з первинного коду:

          sudo apt install build-essential libboost-all-dev libssl-dev
          git clone https://github.com/twisterarmy/twister-seeder.git
          cd twister-seeder
          make
        

Налаштування

Система

Дозвольте підключення через 53 порт, якщо ваш сервер використовує інші налаштування фаєрволу. За допомогою утиліти ufw, яка оперує ip-tables, це можна виконати простою командою нижче:

          sudo ufw allow 53
        

Користувачі операційних систем на базі Ubuntu повинні звільнити 53 порт, оскільки він стандартно використовується процесом systemd-resolved. Для цього внесіть наступні зміни у файл /etc/systemd/resolved.conf:

          DNSStubListener=no
        

Записи DNS

Більшість доменних реєстраторів вимагають щонайменше два записи NS, наприклад, один із таких реєстраторів - безкошктовний сервіс dot.tk. Нижче наведено приклад конфігурації, коли для домену domainseed.tk вказані сервери імен у зонах верхнього рівня:

          domainseed.tk  NS domaindns1.tk, domaindns2.tk
          domaindns1.tk  A Server IP
          domaindns2.tk  A Server IP
        

У якості альтернативного прикладу, якщо у вашому розпорядженні платний домен, та ви не бажаєте замовляти додаткові адреси, достатньо створити два піддомени та вказати в налаштуваннях NS ті, які використовуються у якості NS серверу.

          seed.domain.org NS ns1.domain.org, ns2.domain.org
          ns1.domain.org  A Server IP
          ns2.domain.org  A Server IP
        

Автоматичний запуск DNS сурверу при старті системи, можна налаштувати за допомогою crontab, від користувача root:

          @reboot /path-to/dnsseed -h domainseed.tk -n domaindns1.tk
        

Тестування

Запуск серверу відбувається командою, що виконується від користувача root:

          sudo ./dnsseed -h domainseed.tk -n domaindns1.tk
        

Коли записи NS створено та кеш оновлено, ви повинні отримати ризультат, схожий на цей:

          host -a domainseed.tk domaindns1.tk

          Trying "domainseed.tk"
          Using domain server:
          Name: domaindns1.tk
          Address: IP#53
          Aliases:

          ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18126
          ;; flags: qr aa rd; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

          ;; QUESTION SECTION:
          ;domainseed.tk.		IN	ANY

          ;; ANSWER SECTION:
          domainseed.tk.	40000	IN	NS	domaindns1.tk.
          domainseed.tk.	60	IN	A	IP
          domainseed.tk.	60	IN	A	IP

          Received 99 bytes from IP#53 in 0 ms
        

У разі, якщо знайдений вузол twister-core працює на динамічному порті, він не буде відображатися в результатах індексу.

У списку відображаються тільки вузли twister-core, які працюють на відкритому порті 28333. Утім, прийнанні одного достатньо для поширення інших вузлів на динамічних портах.

Якщо ви бажаєте опублікувати власний вузол у списку серверів DNS, запустіть twister-core з опцією -port=28333 та дочекайтесь оновлення кешу.

Реєстрація в мережі

Після того, як все зроблено та перевірено, додайте адресу вашого серверу DNS в реєстри вузлів twister-core і twister-seeder.

twister-core

Знайдіть у файлі src/chainparams.cpp

          vSeeds.push_back(CDNSSeedData("twisterarmy.org", "seed.twisterarmy.org"));
        

додайте

          vSeeds.push_back(CDNSSeedData("domainseed.tk", "domainseed.tk"));
        

або

          vSeeds.push_back(CDNSSeedData("seed.domain.org", "seed.domain.org"));
        

Сервер DNS буде доступний для користувачів twister-core тільки після оновлення програмного забезпечення до версії, що включає ці зміни.

twister-seeder

Знайдіть у файлі main.cpp

          static const string mainnet_seeds[] = {"seed.twister.net.co","seed2.twister.net.co","seed3.twister.net.co","twisterseed.tk","twisterarmyseed.tk","seed.twisterarmy.org",""};
        

додайте в кінець списку адресу вашого DNS сервісу

          static const string mainnet_seeds[] = {"seed.twister.net.co","seed2.twister.net.co","seed3.twister.net.co","twisterseed.tk","twisterarmyseed.tk","seed.twisterarmy.org","domainseed.tk",""};
        

або

          static const string mainnet_seeds[] = {"seed.twister.net.co","seed2.twister.net.co","seed3.twister.net.co","twisterseed.tk","twisterarmyseed.tk","seed.twisterarmy.org","seed.domain.org",""};
        

Оскільки twister-seeder також потребує ініціальних вузлів для початку сканування інших, запис DNS буде доступний для інших серверів після повторної компіляції.

Монітор мережі

Для того, щоб додати новий DNS сервіс до Мережевого монітору на цьому сайті для зручного відстеження статусу, достатньо доповнити список інших провайдерів на сторінці GitHub.

Вирішення проблем

DNS offline

Якщо налаштований сервер не знаходить ініціальні адреси та ви бачете схоже повідомлення в журналі сканування, це означає, що жоден з інших DNS вузлів не доступний онлайн:

          0/2 available (2 tried in 333s, 0 new, 0 active), 0 banned; 31 DNS requests, 13 db queries
        

Утім, за наявності вузла twister-core, якому все ще вдається підключитись до старих адрес IP (які збережено у файлі ~/.twister/peers.dat), є змога відновити сканування, шляхом ручного додавання адреси підключеного вузла twister-core до twister-seeder для ініціації сканування.

Для цього необхідно у файлі main.cpp знайти строку:

          CDnsSeedOpts *opts = (CDnsSeedOpts *)arg;
        

та додати нижче код, попередньо вказавши IP та стандартний порт 28333 вузла twister-core:

          db.Add(CService("NODE_IP", 28333, true), true);
        

Після цього скомпілювати та пезапустити twister-seeder знову.

Технічна підтримка

https://github.com/twisterarmy/twister-seeder/issues

Контрибуція

Twisterarmy є відкритим до пропозицій суспільним проектом. Будь ласка, будьте вільні надсилати ваші пропозиції та вдосконалення на GitHub.