Website Sources
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

444 lines
33 KiB

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Twisterarmy - Guide</title>
<link rel="shortcut icon" type="image/x-icon" href="/image/icon/favicon.ico" />
<link rel="icon" type="image/x-icon" href="/image/icon/favicon.ico" />
<link rel="icon" type="image/png" sizes="32x32" href="/image/icon/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/image/icon/favicon-16x16.png" />
<link rel="manifest" href="/site.webmanifest" />
<link rel="mask-icon" href="/image/icon/safari-pinned-tab.svg" color="#4a5466" />
<link rel="apple-touch-icon" sizes="180x180" href="/image/icon/apple-touch-icon.png" />
<meta name="apple-mobile-web-app-title" content="Twisterarmy" />
<meta name="application-name" content="Twisterarmy" />
<meta name="msapplication-TileColor" content="#4a5466" />
<meta name="msapplication-TileImage" content="image/icon/mstile-144x144.png" />
<meta name="theme-color" content="#ffffff" />
<link rel="stylesheet" type="text/css" href="/css/font.css" />
<link rel="stylesheet" type="text/css" href="/css/bi.css?v=2" />
<link rel="stylesheet" type="text/css" href="/css/common.css?v=7" />
<link rel="stylesheet" type="text/css" href="/css/mobile.css" />
<script src="/js/jquery.js"></script>
<script src="/js/cloud.js"></script>
</head>
<body class="bg-c-1 bg-img-1 c-0">
<div class="bg-c-2 bg-img-2 c-1 of-hidden position-fixed z-i-99 position-t-0 position-x-0">
<div class="mw-1024 mx-auto">
<div class="nav float-left h-48 lh-48">
<div class="px-16">
<a href="/" class="c-1 f-size-18">Twisterarmy <i>Gateway</i></a>
</div>
</div>
<div class="nav bg-c-2 bg-img-2 float-right t-right h-48 lh-48">
<div class="px-16">
<a class="c-1 ml-16" href="/"><i class="bi-house-door mr-6"></i>Home</a>
<span class="c-0 ml-16"><i class="bi-book mr-6"></i>Guide</span>
<a class="c-1 ml-16" href="/cloud"><i class="bi-cloud mr-6"></i>Cloud</a>
<a class="c-1 ml-16" href="/install"><i class="bi-download mr-6"></i>Install</a>
<a class="c-1 ml-16" href="/network"><i class="bi-activity mr-6"></i>Network</a>
<a class="c-1 ml-16" href="https://github.com/twisterarmy"><i class="bi-github mr-6"></i>GitHub</a>
<div class="c-1 ml-16 d-inline-block">
<i class="bi-globe mr-6"></i>
<span class="c-0">EN</span>
|
<a class="c-1" href="/uk/guide">UK</a>
</div>
</div>
</div>
</div>
</div>
<div class="mw-1024 mx-auto of-hidden my-48">
<div class="position-fixed z-i-98 p-16 o-h">
<h1 class="f-size-20 pt-16 pb-10 mb-16 px-12 f-normal">Guide</h1>
<ul class="ml-16 my-8">
<li>
<a class="c-0 f-size-16" href="#about">About</a>
<ul class="ml-16 my-8">
<li><a class="c-3" href="#about-twister">Twister</a></li>
<li><a class="c-3" href="#about-twisterarmy">Twisterarmy</a></li>
</ul>
</li>
<li>
<a class="c-0 f-size-16" href="#getting-started">Getting Started</a>
<ul class="ml-16 my-8">
<li><a class="c-3" href="#getting-started-overview">Overview</a></li>
<li><a class="c-3" href="#getting-started-requirements">Requirements</a></li>
<li><a class="c-3" href="#getting-started-install">Install</a></li>
<li><a class="c-3" href="#getting-started-uninstall">Uninstall</a></li>
<li><a class="c-3" href="#getting-started-build-from-source">Build from Source</a></li>
<li><a class="c-3" href="#getting-started-alternative-usage">Alternative Usage</a></li>
</ul>
</li>
<li>
<a class="c-0 f-size-16" href="#development">Development</a>
<ul class="ml-16 my-8">
<li><a class="c-3" href="#development-command-line-interface">Command Line Interface</a></li>
<li><a class="c-3" href="#development-rpc-json-api">JSON-RPC/API</a></li>
<li><a class="c-3" href="#development-code-examples">Code examples</a></li>
</ul>
</li>
<li>
<a class="c-0 f-size-16" href="#network-support">Network support</a>
<ul class="ml-16 my-8">
<li><a class="c-3" href="#network-support-mining">Mining</a></li>
<li><a class="c-3" href="#network-support-port-open">Port open</a></li>
<li>
<a class="c-3" href="#dns-seeder">DNS seeder</a>
<ul class="ml-16 my-8">
<li><a class="c-3" href="#dns-seeder-overview">Overview</a></li>
<li><a class="c-3" href="#dns-seeder-install">Install</a></li>
<li><a class="c-3" href="#dns-seeder-config">Configuration</a></li>
<li><a class="c-3" href="#dns-seeder-testing">Testing</a></li>
<li><a class="c-3" href="#dns-seeder-register">Registration</a></li>
<li><a class="c-3" href="#dns-seeder-troubleshooting">Troubleshooting</a></li>
</ul>
</li>
<li><a class="c-3" href="#network-support-contribution">Contribution</a></li>
</ul>
</li>
</ul>
</div>
<div class="ml-240">
<div class="pb-16 pl-16 pr-16 o-h">
<a class="position-t--48 h-32 d-block" id="about"></a>
<h2 class="bb-1 b-c-0 f-size-20 pb-10 px-12 f-normal">About</h2>
<a class="position-t--48 h-32 d-block" id="about-twister"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Twister</h3>
<p class="mb-16">Twister is an open source, decentralized p2p microblogging platform, created by <a class="c-3" href="https://github.com/miguelfreitas">Miguel Freitas</a> in June, 2013.</p>
<p class="mb-16">Software conception uses it own PoW blockchain to store the user meta and DHT/BitTorrent protocol to share the data. Twister supports TOR to make host connections protected, direct messages end-to-end encrypted, groups, and other features.</p>
<p class="mb-16">To start using twister, no funds needed, the network works for everyone and for free. Infrastructure running by PoW miners advertising their services in promotion posts and <a class="c-3" href="/network">DNS seeders</a>, who crawling the active connections. User content saving permanently between following nodes, not require stable online from publisher. Data storage not censured, not owned just by publisher and not limited in time. Your posts accessible as long as you have followers online.</p>
<p class="mb-16">For more technical details about twister conception, please read original <a class="c-3" href="https://github.com/twisterarmy/archive/raw/main/whitepaper.pdf">Whitepaper</a>.</p>
<p>According to <a class="c-3" href="http://twister.net.co/archives/617">Announcement</a>, in June 25, 2020 official project maintenance was discontinued, but the <a class="c-3" href="/network">Network</a> still active as not requires centralized servers.</p>
<a class="position-t--48 h-32 d-block" id="about-twisterarmy"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Twisterarmy</h3>
<p class="mb-16">Twisterarmy is a non-profitable organization, created in 2021 by few users with intention to support original twister network in the community format.</p>
<p class="mb-16">Community resources contain many of independent forks by different people: related software collections, analytics tools, cloud servers and finally - self maintained software solutions, like TwisterArmy Edition with extra-features which not included in official repository. To get more details about our activity, take a look at <a class="c-3" href="https://github.com/twisterarmy">Twisterarmy GitHub Repository</a>.</p>
<p>Our goal to keep speech tools free, people connection accessible and source code living.</p>
<p class="mb-16">If you have any of propositions, please create new ticket or send a message to our official account @twisterarmy</p>
<p>Let&apos;s build a freedom together ♡</p>
<a class="position-t--48 h-32 d-block" id="getting-started"></a>
<h2 class="bb-1 b-c-0 f-size-20 pb-10 px-12 f-normal">Getting Started</h2>
<a class="position-t--48 h-32 d-block" id="getting-started-overview"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Overview</h3>
<p class="mb-16">There is few twister versions available: Official and Twisterarmy Editions. We recommend to chose the last one, because it supports new <a class="c-3" href="/network">DNS seeders</a> and some features, like more templates and media formats support, still not merged with official one. For more details, please read release notes of selected version.</p>
<p>Both of versions are compatible with original twister blockchain, soft- and hard-points, has the same dependencies an code-level versions.</p>
<p>Also, Twisterarmy Edition updates are sending to official branches, but not all of them merged with official codebase. All of official updates are merging with Twisterarmy Edition.</p>
<a class="position-t--48 h-32 d-block" id="getting-started-requirements"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Requirements</h3>
<ul>
<li class="ml-32">CPU Architectures: amd64, ARM</li>
<li class="ml-32">CPU Freq: 500MHz</li>
<li class="ml-32">RAM: 1024 Mb</li>
<li class="ml-32">Storage: 2048 Mb</li>
<li class="ml-32">Bandwidth: depends on the network activity, at this moment - about 2 Gb per month.</li>
</ul>
<a class="position-t--48 h-32 d-block" id="getting-started-install"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Install</h3>
<p>At this moment, available community-maintained pre-compiled Debian/Linux binaries for amd64 and armhf processors.</p>
<p>To download latest version, please visit <a class="c-3" href="/install#download">Installation page</a>.</p>
<p class="mb-16">Pre-compiled binaries contain all requirements to launch twister full node on your machine.</p>
<p class="mb-16">Package installation example:</p>
<pre class="mx-auto mb-16 pt-16 bg-c-4 b-r-3 o-x">
sudo dpkg -i twister.deb
</pre>
<p>After installing, launch twister node from application menu or by command line interface.</p>
<p>Web application in your browser should be opened automatically at the address: <a class="c-3" href="http://localhost:28332">http://localhost:28332</a></p>
<a class="position-t--48 h-32 d-block" id="getting-started-uninstall"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Uninstall</h3>
<p class="mb-16">Purge twister software removing may be initiated by the command or using GUI software manager:</p>
<pre class="mx-auto pt-16 bg-c-4 b-r-3 o-x">
sudo apt remove twister
</pre>
<a class="position-t--48 h-32 d-block" id="getting-started-build-from-source"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Build from Source</h3>
<p class="mb-16">The better way to use free and open software is building it from the sources.</p>
<p class="mb-16">We recommend to use <a class="c-3" href="https://github.com/twisterarmy/twister-cli-installer">Twister CLI Installer</a> script, where you can simply select twister edition and setup remote connection by answering guide questions.</p>
<p>If you would like to build twister for yourself, please, choose edition you like and follow instructions on the <a class="c-3" href="/install#build-from-source">Installation Page, Build from Source section</a>.</p>
<p>Manual installation means installing twister-core server and twister-html client separately.</p>
<a class="position-t--48 h-32 d-block" id="getting-started-alternative-usage"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Alternative Usage</h3>
<p>If you have hardware or internet provider restrictions, limited connection or wish to join twisterverse trough smartphone or laptop where power safe in priority,</p>
<p>try connect to <a class="c-3" href="/cloud">Twister Cloud Providers</a> where the local node installation not required.</p>
<a class="position-t--48 h-32 d-block" id="development"></a>
<h2 class="bb-1 b-c-0 f-size-20 pb-10 px-12 f-normal">Development</h2>
<a class="position-t--48 h-32 d-block" id="development-command-line-interface"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Command Line Interface</h3>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
twisterd [options]
twisterd [options] command [params] Send command to -server or twisterd
twisterd [options] help List commands
twisterd [options] help command Get help for a command
</pre>
<h4 class="f-size-16 mb-16 px-12 f-normal">Options</h4>
<pre class="mx-auto pt-16 bg-c-4 b-r-3 o-x">
-? This help message
-conf=file Specify configuration file (default: ~/.twister/twister.conf)
-pid=file Specify pid file (default: twisterd.pid)
-gen Generate coins (default: 0)
-datadir=dir Specify data directory
-htmldir=dir Specify HTML directory to serve (default: data/html)
-dbcache=n Set database cache size in megabytes (default: 25)
-timeout=n Specify connection timeout in milliseconds (default: 5000)
-proxy=ip:port Connect through socks proxy
-socks=n Select the version of socks proxy to use (4-5, default: 5)
-tor=ip:port Use proxy to reach tor hidden services (default: same as -proxy)
-dns Allow DNS lookups for -addnode, -seednode and -connect
-port=port Listen for connections on port (default: 28333 or testnet: 18333)
-maxconnections=n Maintain at most n connections to peers (default: 125)
-addnode=ip Add a node to connect to and attempt to keep the connection open
-connect=ip Connect only to the specified node(s)
-seednode=ip Connect to a node to retrieve peer addresses, and disconnect
-externalip=ip Specify your own public address
-onlynet=net Only connect to nodes in network net (IPv4, IPv6 or Tor)
-multiconnperip Enable libtorrent multiple connections per ip (default: 0)
-discover Discover own IP address (default: 1 when listening and no -externalip)
-checkpoints Only accept block chain matching built-in checkpoints (default: 1)
-listen Accept connections from outside (default: 1 if no -proxy or -connect)
-bind=addr Bind to given address and always listen on it. Use [host]:port notation for IPv6
-dnsseed Find peers using DNS lookup (default: 1 unless -connect)
-banscore=n Threshold for disconnecting misbehaving peers (default: 100)
-bantime=n Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
-maxreceivebuffer=n Maximum per-connection receive buffer, n*1000 bytes (default: 5000)
-maxsendbuffer=n Maximum per-connection send buffer, n*1000 bytes (default: 1000)
-upnp Use UPnP to map the listening port (default: 1 when listening)
-paytxfee=amt Fee per KB to add to transactions you send
-testnet Use the test network
-debug Output extra debugging information. Implies all other -debug* options
-debugnet Output extra network debugging information
-logtimestamps Prepend debug output with timestamp
-shrinkdebugfile Shrink debug.log file on client startup (default: 1 when no -debug)
-printtoconsole Send trace/debug info to console instead of debug.log file
-regtest Enter regression test mode, which uses a special chain in which blocks can be solved instantly. This is intended for regression testing tools and app development.
-rpcuser=user Username for JSON-RPC connections
-rpcpassword=pw Password for JSON-RPC connections
-rpcport=port Listen for JSON-RPC connections on port (default: 28332 or testnet: 18332)
-rpcallowip=ip Allow JSON-RPC connections from specified IP address
-rpcconnect=ip Send commands to node running on ip (default: 127.0.0.1)
-rpcthreads=n Set the number of threads to service RPC calls (default: 10)
-public_server_mode Limit JSON-RPC execution to public/safe commands only.
-blocknotify=cmd Execute command when the best block changes (%s in cmd is replaced by block hash)
-walletnotify=cmd Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)
-alertnotify=cmd Execute command when a relevant alert is received (%s in cmd is replaced by message)
-upgradewallet Upgrade wallet to latest format
-keypool=n Set key pool size to n (default: 100)
-rescan Rescan the block chain for missing wallet transactions
-salvagewallet Attempt to recover private keys from a corrupt twisterwallet.dat
-checkblocks=n How many blocks to check at startup (default: 500, 0 = all)
-checklevel=n How thorough the block verification is (0-4, default: 3)
-txindex Maintain a full transaction index (default: 0)
-loadblock=file Imports blocks from external blk000??.dat file
-reindex Rebuild block chain index from current blk000??.dat files
-par=n Set the number of script verification threads (up to 16, 0 = auto, 0 = leave that many cores free, default: 0)
-blockminsize=n Set minimum block size in bytes (default: 0)
-blockmaxsize=n Set maximum block size in bytes (default: 250000)
-blockprioritysize=n Set maximum size of high-priority/low-fee transactions in bytes (default: 27000)
-rpcssl Use OpenSSL (https) for JSON-RPC connections
-rpcsslcertificatechainfile=file.cert Server certificate file (default: server.cert)
-rpcsslprivatekeyfile=file.pem Server private key (default: server.pem)
-rpcsslciphers=ciphers Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
</pre>
<a class="position-t--48 h-32 d-block" id="development-rpc-json-api"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">JSON-RPC/API</h3>
<p>JSON data requests should be encoded with UTF-8.</p>
<p>Before using API calls trough RPC interface, create configuration file in the twister profile directory.</p>
<p class="mb-16">On the UNIX-based platforms, path to the file looks like <i>~/.twister/twister.conf</i></p>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
rpcuser=username
rpcpassword=password
rpcsslcertificatechainfile=path to certificate file (if SSL connection required)
rpcsslprivatekeyfile=path to key file (if SSL connection required)
rpcallowip=x.x.x.x to restrict connections from specified IP (0.0.0.0 or * to allow all connections)
</pre>
<p class="mb-16"><small>* By using community-written <a class="c-3" href="https://github.com/twisterarmy/twister-cli-installer">twister-cli-installer</a> script, configuration file and certificates creating automatically.</small></p>
<h4 class="f-size-16 mb-16 px-12 f-normal">Calls list</h4>
<pre class="mx-auto pt-16 bg-c-4 b-r-3 o-x">
twisterd help
</pre>
<a class="position-t--48 h-32 d-block" id="development-code-examples"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Code examples</h3>
<h4 class="f-size-16 mb-16 px-12 f-normal">PHP</h4>
<p><a class="c-3" href="https://github.com/twisterarmy/cloud-server">cloud-server</a> &mdash; Multi-account instance allow users to interact with the twister network through web service.</p>
<a class="position-t--48 h-32 d-block" id="dns-seeder"></a>
<h2 class="bb-1 b-c-0 f-size-20 pb-10 px-12 f-normal">DNS seeder</h2>
<a class="position-t--48 h-32 d-block" id="dns-seeder-overview"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Overview</h3>
<p>Twister network requires a couple of special DNS seeders which provide an updated list of known peers. If you have a 24×7 linux machine and you are able to add an special NS record to your domain, please consider running twister-seeder.</p>
<a class="position-t--48 h-32 d-block" id="dns-seeder-install"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Install</h3>
<p class="mb-16">At this moment, twister-seeder could be compiled from the source code:</p>
<pre class="mx-auto pt-16 bg-c-4 b-r-3 o-x">
sudo apt install build-essential libboost-all-dev libssl-dev
git clone https://github.com/twisterarmy/twister-seeder.git
cd twister-seeder
make
</pre>
<a class="position-t--48 h-32 d-block" id="dns-seeder-config"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Configuration</h3>
<h4 class="f-size-16 mb-16 px-12 f-normal">System</h4>
<p class="mb-16">Enable 53 port connections, if the firewall enabled. With the ufw manager for ip-tables, it is possible just by one simple command bellow:</p>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
sudo ufw allow 53
</pre>
<p class="mb-16">Ubuntu users must to free 53 port, that natively using for systemd-resolved process in <i>/etc/systemd/resolved.conf</i></p>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
DNSStubListener=no
</pre>
<h4 class="f-size-16 mb-16 px-12 f-normal">DNS records</h4>
<p class="mb-16">Usually, providers requires at least 2 NS records in the domain settings:</p>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
domainseed.tk NS domaindns1.tk, domaindns2.tk
domaindns1.tk A Server IP
domaindns2.tk A Server IP
</pre>
<p class="mb-16">On following example - DNS seeder implementation, that has name servers on itself subdomains:</p>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
seed.domain.org NS ns1.domain.org, ns2.domain.org
ns1.domain.org A Server IP
ns2.domain.org A Server IP
</pre>
<h4 class="f-size-16 mb-16 px-12 f-normal">Launch</h4>
<p class="mb-16">To launch our DNS instance on the system startup, let's update crontab settings (by root):</p>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
@reboot /path-to/twister-seeder/dnsseed -h seed.domain.org -n ns1.domain.org > /dev/null 2>&1
</pre>
<p class="mb-16">Alternatively, systemd users may create the service:</p>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
# /etc/systemd/system/twister-seeder.service
[Unit]
Description=Twister DNS Seed
After=network.target
[Service]
Type=simple
ExecStart=/path-to/twister-seeder/dnsseed -h seed.domain.org -n ns1.domain.org
StandardOutput=null
StandardError=file:/path-to/twister-seeder-errors.log
Restart=on-failure
[Install]
WantedBy=multi-user.target
</pre>
<p class="mb-16">Then restart configuration, enable service to system auto-start, and launch</p>
<pre class="mx-auto pt-16 bg-c-4 b-r-3 o-x">
systemctl daemon-reload
systemctl enable twister-seeder
systemctl start twister-seeder
</pre>
<a class="position-t--48 h-32 d-block" id="dns-seeder-testing"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Testing</h3>
<p class="mb-16">Run twister-seeder server by the root user:</p>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
sudo /path-to/dnsseed -h domainseed.tk -n domaindns1.tk
</pre>
<p class="mb-16">If everything configurated properly, and DNS records cache has been updated, we can test DNS response with <i>host</i> tool:</p>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
host -a domainseed.tk domaindns1.tk
Trying &quot;domainseed.tk&quot;
Using domain server:
Name: domaindns1.tk
Address: IP#53
Aliases:
;; -&gt;&gt;HEADER&lt;&lt;- 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
</pre>
<p>Pay attention, in the ANSWER SECTION transmitting twister-core nodes, that running on port 28333 only, so if you also want to participate DATA sharing, do not forget about opening this port on your twister-core server using <i>-port=28333</i> flag.</p>
<a class="position-t--48 h-32 d-block" id="dns-seeder-register"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Network registration</h3>
<p class="mb-16">Finally, our seeding instance should be reachable for other <a class="c-3" href="https://github.com/twisterarmy/twister-seeder">twister-seeder</a> and <a class="c-3" href="https://github.com/twisterarmy/twister-core">twister-core</a> nodes, so let's declare it in the source code of these projects.</p>
<h4 class="f-size-16 mb-16 px-12 f-normal">twister-core</h4>
<p class="mb-16">Find following string in the file <i>src/chainparams.cpp</i></p>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
vSeeds.push_back(CDNSSeedData("twister.net.co", "seed.twister.net.co"));
</pre>
<p class="mb-16">add after</p>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
vSeeds.push_back(CDNSSeedData("domainseed.tk", "domainseed.tk"));
</pre>
<p class="mb-16">or</p>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
vSeeds.push_back(CDNSSeedData("seed.domain.org", "seed.domain.org"));
</pre>
<p class="mb-16">Note, after these changes, twister-core users need to be noticed about updating their software to apply these changes. Usually, it happens on the new release announcement.</p>
<h4 class="f-size-16 mb-16 px-12 f-normal">twister-seeder</h4>
<p class="mb-16">Find following string in the file <i>main.cpp</i></p>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
static const string mainnet_seeds[] = {"seed.twister.net.co","seed2.twister.net.co","seed3.twister.net.co","twisterseed.tk","twisterarmyseed.tk","seed.domain.org",""};
</pre>
<p class="mb-16">add DNS seeder address to the end of this list:</p>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
static const string mainnet_seeds[] = {"seed.twister.net.co","seed2.twister.net.co","seed3.twister.net.co","twisterseed.tk","twisterarmyseed.tk","seed.domain.org","domainseed.tk",""};
</pre>
<p class="mb-16">or</p>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
static const string mainnet_seeds[] = {"seed.twister.net.co","seed2.twister.net.co","seed3.twister.net.co","twisterseed.tk","twisterarmyseed.tk","seed.domain.org","seed.domain.org",""};
</pre>
<p class="mb-16">Changes will be applied on the twister-seeders recompilation.</p>
<h4 class="f-size-16 mb-16 px-12 f-normal">Network monitor</h4>
<p>Add your DNS to the <a class="c-3" href="/network.html">Network Monitor</a> on this website by changing providers list on <a class="c-3" href="https://github.com/twisterarmy/twisterarmy.github.io/blob/main/network.html">GitHub</a>.</p>
<a class="position-t--48 h-32 d-block" id="dns-seeder-troubleshooting"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Troubleshooting</h3>
<h4 class="f-size-16 mb-16 px-12 f-normal">DNS offline</h4>
<p class="mb-16">If your twister-seeder returns empty results on the network crawling, like response on example below, seems that another DNS seeding instances could be offline:</p>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
0/2 available (2 tried in 333s, 0 new, 0 active), 0 banned; 31 DNS requests, 13 db queries
</pre>
<p class="mb-16">As the solution, if you have still connected to the network twister-core instance, it is pretty possible to grab active connections from collected <i>~/.twister/peers.dat</i>. All that is needed - connecting our twister-seeder to the twister-core running, by using it IP and 28333 port.</p>
<p class="mb-16">Open <i>main.cpp</i> file and find a row:</p>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
CDnsSeedOpts *opts = (CDnsSeedOpts *)arg;
</pre>
<p class="mb-16">add twister-core connection details bellow:</p>
<pre class="mx-auto pt-16 mb-16 bg-c-4 b-r-3 o-x">
db.Add(CService("NODE_IP", 28333, true), true);
</pre>
<p class="mb-16">Save and <a class="c-3" href="/guide.html#dns-seeder-install">recompile</a> twister-seeder and launch it again with twister-core running.</p>
<h4 class="f-size-16 mb-16 px-12 f-normal">Technical support</h4>
<p><a class="c-3" href="https://github.com/twisterarmy/twister-seeder/issues">https://github.com/twisterarmy/twister-seeder/issues</a></p>
<a class="position-t--48 h-32 d-block" id="network-support"></a>
<h2 class="bb-1 b-c-0 f-size-20 pb-10 px-12 f-normal">Network support</h2>
<a class="position-t--48 h-32 d-block" id="network-support-mining"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Mining</h3>
<p class="mb-16">Mine blocks and advertise your services! This operation wanted to store network meta information in blockchain.</p>
<p>Twister ecosystem has no internal currency and market cost, the mining process make your promotional messages text permanently saved in blockchain only (comparing to the regular publications that stored in DHT)</p>
<a class="position-t--48 h-32 d-block" id="network-support-port-open"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Port open</h3>
<p class="mb-16">If you have dedicated IP, or twister node running in the alternative network over NAT (like <a class="c-3" href="https://yggdrasil-network.github.io">Yggdrasil</a>) please open following ports in the firewall rules to share data collected with other peers:</p>
<ul class="mb-16 ml-16">
<li>28333 - TCP *</li>
<li>29333 - TCP+UDP *</li>
<li>4433 - Libtorrent / SSL / IPv4</li>
<li>4434 - Libtorrent / SSL / IPv6</li>
</ul>
<p class="mb-16">
<i>* random by default, use -port=NUMBER on twisterd startup</i>
</p>
<p class="mb-16">
To open specified port on debian-based systems from everywhere, execute following command:
</p>
<pre class="mx-auto pt-16 bg-c-4 b-r-3 o-x">
sudo ufw allow {PORT}
</pre>
<a class="position-t--48 h-32 d-block" id="network-support-port-contribution"></a>
<h3 class="f-size-20 mb-16 px-12 f-normal">Contribution</h3>
<p>Twisterarmy is the community project, feel free to share your proposes and contributions to <a class="c-3" href="https://github.com/twisterarmy">GitHub</a></p>
</div>
</div>
</div>
</body>
</html>