Code Monkey home page Code Monkey logo

alfis's Introduction

Alfis

Builds

Alternative Free Identity System

This project represents a minimal blockchain without cryptocurrency, capable of sustaining any number of domain names in a bunch of original alternative zones. Not so clear? Hold on.

This software provides:

  • Very small and peer-to-peer synchronized database of domain names. The consistency of this database is based on blockchain technology, that prevents retroactive changing of data, and has strict cryptographical consensus.
  • DNS server with cache, like you have in your Internet-router. It resolves the domains from database and forwards all regular DNS-requests to some other resolver - your router, Google DNS, Cloudflare DNS, or AdGuard DNS (if you want to block ads and trackers).
  • Other systems need you to organize and run several DNS-servers to resolve their domains and regular domains, we have both in one. Moreover, ALFIS can forward requests of regular domains to DNS-over-HTTPS server. The security and privacy is right here.
  • Convenient graphical user interface to create domains in this alternative domain system. If you want just to use it like a DNS-server you can run it with -n flag or just build/download the variant without GUI.

Screenshot

Screenshot

Screenshot

How it works?

Every node connects to its siblings and synchronizes the domain database. This DB consists of cryptographically bound blocks, that contain encrypted domain names, contacts, and some info, if you wish. There are 10 domain zones available to get domain in: .anon, .btn, .conf, .index, .merch, .mirror, .mob, .screen, .srv, .ygg. But, .anon and .ygg are bound to have IP-addresses from Yggdrasil Network only.

Building and running

On every OS

You can download and run already built binaries from releases, or you can build project yourself.

You can build Alfis by issuing cargo build --release and cargo run --release commands in a directory of cloned repository.

If you want to build a version without GUI and without DoH: cargo build --release --no-default-features And this for build without GUI, but with DoH: cargo build --release --no-default-features --features="doh"

Windows Logo On Windows

You don't need any additional steps to build Alfis, just stick to the MSVC version of Rust.

If you see an error about missing VCRUNTIME140.dll when running alfis you will need to install VC Redistributable from Microsoft.

If you want to use modern browser engine from Edge instead of old from IE, you need to build with this command: cargo build --release --features "edge" (or use corresponding build from releases).

Windows Logo On Windows (MINGW64)

If you'd rather use Gnu version of Rust you can build Alfis by these steps:

pacman -S git mingw64/mingw-w64-x86_64-rust mingw64/mingw-w64-x86_64-cargo-c
git clone https://github.com/Revertron/Alfis.git
cd Alfis
cargo build

Linux Logo On Linux

If you are building on Linux you must ensure that you have libwebkitgtk library installed. You can do it by issuing this command: sudo apt install libwebkit2gtk-4.0-dev (on Debian/Ubuntu and derivatives).

Arch Linux Logo On Arch Linux

Install from available AUR package created by @pztrn:

yay -S alfis

Gentoo Logo On Gentoo Linux

Available in dm9pZCAq overlay

eselect repository enable dm9pZCAq
emerge --sync dm9pZCAq
emerge net-dns/alfis

NixOS Logo On Nix/NixOS

nix-shell in this repo and then run cargo build --release and cargo install after you have entered the shell.

Installation

Debian/Ubuntu (only blockchain DNS, without GUI)

If you want to just use ALFIS as a DNS daemon and resolve domains in blockchain, as well as clearnet domains. You just need to install alfis service from repo and change your resolver in /etc/resolv.conf. Beware of NetworkManager, it can change your resolvers at will.

  1. Download repository public key and add it to your APT
wget -qO - https://deb.revertron.com/key.txt | gpg --dearmor - | sudo tee /usr/share/keyrings/alfis.gpg
  1. Add repository path to sources list
echo 'deb [signed-by=/usr/share/keyrings/alfis.gpg] https://deb.revertron.com/ debian alfis' | sudo tee /etc/apt/sources.list.d/alfis.list
  1. Update packages and install ALFIS
sudo apt update && sudo apt install alfis
  1. Enable and start the service
systemctl enable --now alfis

After that configuration is in file /etc/alfis.conf and data is saved to /var/lib/alfis. If you have some DNS server bound to port 53, it will not properly start. Deal with it on your own.

openSUSE (without GUI)

  1. Add repo:
zypper ar --refresh obs://home:Werwolf2517 home:Werwolf2517
  1. Refresh repos cache
zypper --gpg-auto-import-keys refresh
  1. Install package
zypper install -y Alfis
  1. Run daemon
systemctl enable --now alfis

Docker

If you want to run ALFIS in docker container, you can do this by running:

docker run --rm --name alfis -p 53:53/tcp -p 53:53/udp cofob/alfis

GUI version Windows/Linux/macOS (if you want to create and change domains)

If you want to create and manage your own domains on blockchain, you will need a version with GUI. You can download it from releases section, choose appropriate OS and architecture version. It needs to be without nogui suffix.

Just unzip that archive in some directory and run alfis (or alfis.exe) binary. By default, it searches for config file, named alfis.toml in current working directory, and creates/changes blockchain.db file in the same directory. If you want it to load config from another file you can command it so: alfis -c /etc/alfis.conf.

Roadmap

  1. Stabilize blockchain functions (domain transfer, info & contacts in UI), bug hunting and fixing.
  2. Change DNS server/proxy to own resource saving implementation (using trust-dns-proto for RR parsing).
  3. P2P traffic encryption (ECDH). ✅
  4. Web-GUI to manage you node from browser.

Remarkable contributions

  • @umasterov contributed fantastic logo for this project.

alfis's People

Contributors

13werwolf13 avatar alexovchinnicov avatar averyanalex avatar cofob avatar dependabot[bot] avatar dm9pzcaq avatar esin avatar exepirit avatar freeacetone avatar iav avatar ilyar avatar la-ninpre avatar nxshock avatar r4sas avatar renesat avatar revertron avatar rex4539 avatar ufm avatar wegank avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

alfis's Issues

[feachure req] Mining speed stats

Статистика скорости майнинга на базе CPU-speed.

Понимаю, что скорость операции майнинг рандомна и собирать её безтолку, но вот скорость перебора хешей - вполне стабильная величина и прямо-пропорциональна производительности CPU.

Каждая запись лога может быть:

  • сообщение о скорости майнинга;
  • сообщение о способе контакта с другим участником блокчейна с целью получения его дампа записей о скорости майнинга.

Каждое сообщение о скорости майнинга содержит:

  • datetime - время генерации статистики по UTC;
  • app string - имя программы и номер версии;
  • CPU string - имя производителя CPU и модель CPU;
  • threads count - количество потоков, задействованных в операции майнинга;
  • difficulty - уровень сложности;
  • operation - тип операции майнинга: ключ, домен или зона;
  • mining time - время, затраченное на операцию майнинга;
  • average speed - средняя скорость хеширования в H/s (общее количество хешей, обработанных за сессию майнинга, разделить на веремя майнинга);
  • node public key - публичный ключ ноды, сгенерировавшей запись;
  • sign - подпись данной строки приватным ключём ноды;
  • ttl (time to live) - количество нод, пройдя через которые сообщение будет отброшено (как мера от безконечного флуда).

Каждое сообщение о способе контакта содержит:

  • datetime - время сохранения записи в локальном лог-файле статистики;
  • contact-info - информация о способе получения дампа лога статистики;
  • node public key - публичный ключ ноды, которая сохраняет статистику;
  • sign - подпись данной строки приватным ключём ноды.

Опции конфигурации:

  • stats-send [bool] - отправлять ли статистику желающим её получить;
  • stats-receive [bool] - принимать ли логи статистики от соседей;
  • stats-save [bool] - сохранять ли логи полученной статистики в файл;
  • stats-file [string] - путь к фалу базы в формате Sqlite для добавления записей. По умолчанию - "mining-stats.db". Каждая новая строка - отдельная запись.
  • stats-contact [string] - текстовая строка с информации о способе получения дампа лога с данной ноды.

Если stats-send = yes, то нода отправляет логи статистики всем соседям, у которых стоит stats-receive = yes.
Если stats-receive = yes, то нода извещает соседей о том, что она желает принимать статистику и принимает эту статистику.
Если stats-save = yes, то нода сохраняет сообщения статистики в файл, указанный в stats-file.

Если stats-send = yes и stats-receive = yes, но stats-save = no - то нода только учавствует в распространении сообщений о скорости майнинга, но не хранит такие сообщения локально.

Каждая нода, которая отправляет логи, после сообщения типа "скорость майнинга", отправляет также сообщение "способ контакта" (если оно не пустое) 1 раз за сеанс связи с соседом.
Каждое сообщение типа "способ контакта" проверяется на наличие в базе по ключу "public-key". Если информация о способе контакта с владельцем ноды уже присутствует в базе, то такое сообщение только обновляет существующую запись, но не добавляет новую запись.

Can't open my old key

When I try to open my old key, it doesn't open, I get this:

18:19:16 [WARN] alfis::keystore: Loaded key from OLD format! Please, resave it!
18:19:16 [INFO] alfis::web_ui: Loaded keystore with keys: 72931D5EC6253820BE4EE8DC1745CF51B3ABB70917F57ACAE928DDF4F0C9ED3F, 09F53DECA7CDE8661F603072B4C1231FD63F4D80D6DFD31DDEA5631888F2A492
thread 'webui' panicked at 'called `Result::unwrap()` on an `Err` value: Error { code: Some(1), message: Some("no such column: signing") }', src/blockchain/chain.rs:601:69
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
thread 'webui' panicked at 'called `Result::unwrap()` on an `Err` value: "PoisonError { inner: .. }"', src/web_ui.rs:200:44
thread '<unnamed>' panicked at 'called `Result::unwrap()` on an `Err` value: "PoisonError { inner: .. }"', src/p2p/network.rs:152:58

When started with -v flag, Alfis tries to initialize the DNS port listening

It looks like when started with -v flag, it tries to initialize the DNS port listening. If another instance of Alfis is already running at this time, the "Failed to bind TCP (UDP) listener" error will occur.

2021-03-30 23:25:40,119 ERROR [alfis::dns_utils] Failed to bind UDP listener: Io(Os { code: 98, kind: AddrInUse, message: "Address already in use" })
2021-03-30 23:25:40,119 ERROR [alfis::dns_utils] Failed to bind TCP listener: Io(Os { code: 98, kind: AddrInUse, message: "Address already in use" })
thread 'main' panicked at 'Can't bind to address: Os { code: 98, kind: AddrInUse, message: "Address already in use" }', src/p2p/network.rs:49:50
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Convert key files to Base64 format

Is it possible to save a key file encoded in base64?
So it will be easier to understand from the content which key it is, if there are several of them.

gui freeze after minin block and open "New domain" dialog

0.5.1

Майню блок с именем домена.
Блок смайнен.
Не выключая GUI перехожу в "Domains/New domain" и GUI зависает. Содержимое окна отображается даже если скрыть-отобразить окно. Курсор поверх окна принимает форму, как будто курсор находится поверх виджета со строкой редактирования текста.

При возникновении ошибки с зависанием GUI, в stdout никаких ошибок не добавляется.

Эта ошибка воспроизводилась и в 0.4.х версиях.

Question: How do I "transfer" a domain to another key?

How do I "transfer" a domain to another key?
I don't want to transfer the domain to another person, I just want to separate the domains that have been mined with a single key.
Is it possible? And if it is not yet possible, is it planned in the future?

Add log levels

Текущий уровень логирования безостановочно забивает журнал отладочными сообщениями. Необходимо добавить в конфиг уровни логирования, чтобы можно было отключать отладочные сообщения и оставлять только действительно важные события.

The network thread often gets stuck

The thread dealing with connections to other nodes periodically freezes, even when mining is not running. Thus, it is impossible to be sure that the mining will not be in vain, because the block will not be able to be up-to-date (match the previous one) and will not be able to be sent to the network.

Can't start webview if no blockchain is present

On Windows with default webwiew feature (not edge):

2021-04-01 12:42:42,752 INFO  [alfis::Main] Starting ALFIS 0.3.7
2021-04-01 12:42:42,753 INFO  [alfis::Main] Loaded settings: Settings { origin: "00000102C2F9BFD2803284D93327F089D60FC72A06F19AF2384567F2646B8348", key_file: "default.key", net: Net { peers: ["test-ip4.alfis.name:4244", "test-ip6.alfis.name:4244"], listen: "[::]:4244", public: true, yggdrasil_only: false }, dns: Dns { listen: "127.0.0.1:5300", threads: 20, forwarders: ["127.0.0.1:53"] }, mining: Mining { threads: 4 } }
2021-04-01 12:42:42,794 INFO  [alfis::Main] No blocks found in DB
2021-04-01 12:42:42,799 DEBUG [alfis::dns::authority] Authority dir (zones) not found, skipping.
2021-04-01 12:42:42,804 DEBUG [alfis::p2p::network] Started node listener on [::]:4244
2021-04-01 12:42:42,906 DEBUG [alfis::web_ui] Command {"cmd":"loaded"}
2021-04-01 12:42:42,948 INFO  [alfis::web_ui] Current blockchain height is 0

image
After answering Yes or No you will get error and application will be stopped:

2021-04-01 12:42:43,716 ERROR [alfis::web_ui] Something wrong with webview, exiting

Are Alphis test-ip4.alfis.name and test-ip6.alfis.name servers offline/down?

Currently I'm unable to get any blocks past 398 (and am not sure how many there even is left) and I tried to get it on two different computers on two different networks, both via yggdrasil and via regular internet. Both of these scripts reached 398 blocks independently of each other and will not get past that number. The GUI on the Mac still says connecting and when clicking it and then confirm on the stop mining button (hadn't even started mining, I just start up the program), it does nothing. I have to exit it either via the Mac Cmd+Q hotkey or the Window's X button.

I'm not sure if this is a bug in the current client or if something's up with the server end, but I'm not able to even tell if I finished syncing the blockchain or not, much less how much is left. It's been stuck on 398 for over an hour now.

Screen Shot 2021-05-03 at 3 57 32 PM

Screen Shot 2021-05-03 at 3 57 18 PM

no implementation for `std::vec::Vec<u8> == [u8]`

Error report:

$ git clone https://github.com/Revertron/Alfis
$ cd Alfis
$ cargo build --release
   Compiling ring v0.16.20
   Compiling syn v1.0.69
   Compiling rust-crypto v0.2.36
   Compiling num-bigint v0.4.0
   Compiling blake2 v0.9.1
   Compiling sha2 v0.9.3
   Compiling poly1305 v0.6.2
   Compiling rand v0.8.3
   Compiling blakeout v0.3.0
   Compiling webpki v0.21.4
   Compiling sct v0.6.1
   Compiling rustls v0.19.1
   Compiling webpki-roots v0.18.0
   Compiling synstructure v0.12.4
   Compiling serde_derive v1.0.125
   Compiling thiserror-impl v1.0.24
   Compiling strum_macros v0.18.0
   Compiling zeroize_derive v1.1.0
   Compiling derive_more v0.99.13
   Compiling minreq v2.3.1
   Compiling zeroize v1.3.0
   Compiling curve25519-dalek v3.1.0
   Compiling chacha20 v0.6.0
   Compiling chacha20poly1305 v0.7.1
   Compiling thiserror v1.0.24
   Compiling x25519-dalek v1.1.1
   Compiling serde v1.0.125
   Compiling toml v0.5.8
   Compiling system-deps v1.3.2
   Compiling winres v0.1.11
   Compiling chrono v0.4.19
   Compiling uuid v0.8.2
   Compiling serde_json v1.0.64
   Compiling ed25519-dalek v1.0.1
   Compiling glib-sys v0.10.1
   Compiling gobject-sys v0.10.0
   Compiling gio-sys v0.10.1
   Compiling pango-sys v0.10.0
   Compiling gdk-pixbuf-sys v0.10.0
   Compiling cairo-sys-rs v0.10.0
   Compiling gdk-sys v0.10.0
   Compiling atk-sys v0.10.0
   Compiling gtk-sys v0.10.0
   Compiling soup-sys v0.10.0
   Compiling alfis v0.4.19 (/home/miki/del/Alfis)
   Compiling simplelog v0.10.0
   Compiling webkit2gtk-sys v0.12.0
   Compiling webview-sys v0.6.2
   Compiling web-view v0.7.3
error[E0277]: can't compare `std::vec::Vec<u8>` with `[u8]`
   --> src/blockchain/chain.rs:451:46
    |
451 |                     if block.pub_key.deref().eq(key) {
    |                                              ^^ no implementation for `std::vec::Vec<u8> == [u8]`
    |
    = help: the trait `std::cmp::PartialEq<[u8]>` is not implemented for `std::vec::Vec<u8>`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0277`.
error: could not compile `alfis`.

To learn more, run the command again with --verbose.

Gentoo
dev-lang/rust-1.47.0-r2

Deal with "twin" connects to one node

It is frequent, that one node has multiple IPs, for example IPv4 and IPv6, and ALFIS is connecting and keeps two connections to one node.
There is a mechanism to identify such connects, as every Hand and Shake message contains unique node ID (changes on every restart).

add "cargo build --release" to build instructions

Если следовать инструкции из README.md, то инструкция "cargo build" создаёт debug-версию приложения, размеро исполняемого файла которой - более 30 Мб.
Большинству достаточно версии release, размер исполняемого файла которой - несколько Мб.

Предлагаю внести изменения в инструкцию по сборке приложения в файле README.md, чтобы по-умолчанию собиралась версия release.

cargo build --release

Identical blocks

The blocks with IDs 31, 32 are Identical (pubkey, signature, data).
In the future, this may lead to an excessive increase of the blockchain.

Endless "Connecting..."

  • Arch Linux
  • Alfis 0.4.3
  • webkit2gtk 2.32.0
  • New config created by alfis -g alfis.conf
  • Alfis started with -v switch

There is no messages about failed connections. Why do I see endless Connecting...?

screenshot

Incorrect response for SOA request of Alfis zone

# dig SOA ygg @318:1a0f:f6fd:77c::53
;; Got bad packet: FORMERR
84 bytes
75 33 85 83 00 01 00 00 00 01 00 00 03 79 67 67          u3...........ygg
00 00 06 00 01 00 00 00 06 00 01 00 00 00 00 00          ................
33 03 6e 73 30 07 6f 70 65 6e 6e 69 63 04 67 6c          3.ns0.opennic.gl
75 65 00 0a 68 6f 73 74 6d 61 73 74 65 72 c0 25          ue..hostmaster.%
78 76 a5 0b 00 00 07 08 00 00 03 84 00 09 3a 80          xv............:.
00 00 0e 10                                              ....

Fix some errors in resolving

A report shows that ALFIS' resolver is not so consistent at times:

# dig ya.ru @318:1a0f:f6fd:77c::53

; <<>> DiG 9.11.5-P4-5.1-Debian <<>> ya.ru @318:1a0f:f6fd:77c::53
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 290
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 4

;; QUESTION SECTION:
;ya.ru.                         IN      A

;; ANSWER SECTION:
ya.ru.                  600     IN      A       87.250.250.242

;; AUTHORITY SECTION:
ya.ru.                  345600  IN      NS      ns2.yandex.ru.
ya.ru.                  345600  IN      NS      ns1.yandex.ru.

;; ADDITIONAL SECTION:
ns1.yandex.ru.          345600  IN      A       213.180.193.1
ns2.yandex.ru.          345600  IN      A       93.158.134.1
ns1.yandex.ru.          345600  IN      AAAA    2a02:6b8::1
ns2.yandex.ru.          345600  IN      AAAA    2a02:6b8:0:1::1

;; Query time: 301 msec
;; SERVER: 318:1a0f:f6fd:77c::53#53(318:1a0f:f6fd:77c::53)
;; WHEN: Wed Apr 14 18:35:20 UTC 2021
;; MSG SIZE  rcvd: 170

# dig ya.ru @318:1a0f:f6fd:77c::53

; <<>> DiG 9.11.5-P4-5.1-Debian <<>> ya.ru @318:1a0f:f6fd:77c::53
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3749
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;ya.ru.                         IN      A

;; ANSWER SECTION:
ya.ru.                  600     IN      A       87.250.250.242

;; Query time: 0 msec
;; SERVER: 318:1a0f:f6fd:77c::53#53(318:1a0f:f6fd:77c::53)
;; WHEN: Wed Apr 14 18:35:26 UTC 2021
;; MSG SIZE  rcvd: 39

But there is another possible solution - change DNS code to some decent library instead of Hermes DNS server.

[feature request] command line interface

Use case: usage Alfis functions in command line without GUI.

Start daemon as blockchain node on pc1:

# Generate privacy/public keys for server control:
pc1> alfis-cli control-key --output-privacy control-privacy.key --output-public control-public.key 

# Start ALFIS daemon:
pc1> alfis -n --port 12345 --control-key control-public.key

Start miner task on pc2, which use blockchain from pc1:

# Generate credential keys:
pc2> alfis-cli credentials --host pc1 --port 12345 --control-key control-privacy.key \
  --output ~/.config/alfis/keys/default.key <other-mining-options>
pc2> alfis-cli credentials --host pc1 --port 12345 --control-key control-privacy.key \
  --output ~/.config/alfis/keys/secret.key <other-mining-options>

# Mine domain "example.ygg":
# Start task1 in flow1 (terminal 1). Use 2 CPU cores.
# Use privacy key, which public key pair used on pc1.
pc2> alfis-cli domain --host pc1 --port 12345 --control-key control-privacy.key --cpu 2 \
  --credential ~/.config/alfis/keys/default.key --domain example --zone ygg <other-mining-options>

# Mine domain "secret-domain.ygg":
# Start task2 in flow2 (terminal 2). Use 2 CPU cores.
pc2> alfis-cli domain --host pc1 --port 12345 --control-key control-privacy.key --cpu 2 \
  --credential ~/.config/alfis/keys/secret.key --domain secret-domain --zone ygg <other-mining-options>

# Mine zone "newzone":
# Start task3 in flow3 (terminal 3). Use 4 CPU cores.
pc2> alfis-cli zone --host pc1 --port 12345 --control-key control-privacy.key --cpu 4 \
  --credential ~/.config/alfis/keys/secret.key --zone newzone --difficulty 26 <other-mining-options>

<other-mining-options> may contain option like "--data", which require parameter as json-formatted string.
If "json-formatted string" contain attributes, like domain/zone, which already used as "--domain" or "--zone" cli parameter, then cli parameter must have priority ("json-formatted string" will be rewrited with values from "--domain" or "--zone" parameter).

Daemon from pc1 only used for read/write from/to network blockchain and not used for mining (use low level of CPU power).

alfis-cli command may use blockchain from local machine (without "--control-key" parameter), or use remote blockchain ("--host" and "--port" parameters may have default values, buy "--control-key" is always required).
If alfis-cli use local blockchain, then "alfis-cli" start new daemon instance with dynamically generated public/private keys. Those generated private key must be printed in log. Those daemon must be stopped when alfis-cli finished his task.
Each alfis-cli command, which use local blockchain and started without parameters --host/--port/--control-key, must start new daemon instance. If user want to use local blockchain from previously started daemon, then user must select connection parameters from log of first alfis-cli instance. Daemon, started from previously alfis-cli command, must be closed after finish of all alfis-cli instances, which uses this shared daemon.

Each alfis-cli open socket to local/remote alfis daemon and receive all events, which generated in blockhain network.

info message: "New version X.X.X available! [New version is incompatible with your version Y.Y.Y.]"

При установлении соединения ноды должны обмениваются версиями используемого приложения.
Если у ноды версия предыдущая, то в логах и в GUI должно быть выведено сообщение пользователю "Появилась новая версия приложения такая-то!"

Сообщение в GUI должно быть отображено как строкой в Events, так и неотключаемым сообщением на главной вкладке Credentials - как сейчас отображается сообщение о необходимости конвертации ключа из default.key в key1.toml.

Если новая версия несовместима с предыдущей версией, то приложение предыдущей версии длжно отобразить пользователю сообщение "Новая версия, используемая удалённой стороной, несовместима с вашей используемой версией!" как часть того самого сообщения "Появилась новая версия приложения такая-то!".

Move new domain to a modal dialog

All domain mining controls that are now on Domains tab will be moved to a dialog.
The tab space will be used to present current owned domains, one in a row, and currently mining or in a queue domains.

Do we need mining when renewing or modifying domains?

Here's what I thought: I've already mined the domains with my key. When I will renew these domains or modify something for some reason (for example, as here) does it make sense to mine them with the initial difficulty?
After all, if I want to modify something with my key, can i just mine any block with any number of zeros at the beginning or end in the hash, and even with their absence?
Could you implement this? Please.

The latest version of ALFIS has stopped opening my key, with which I have already mined domains

2021-04-15 21:31:38,827 INFO  [alfis::web_ui] Loaded keystore with key: XXX1234567890MYKEY1234567890XXX
thread 'webui' panicked at 'encryption failure!: Error', src/crypto/chacha.rs:28:61
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
thread '<unnamed>' panicked at 'called `Result::unwrap()` on an `Err` value: "PoisonError { inner: .. }"', src/p2p/network.rs:137:58
2021-04-15 21:31:49,722 INFO  [alfis::web_ui] Loaded keystore with key: XXX1234567890MYKEY1234567890XXX
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: "PoisonError { inner: .. }"', src/web_ui.rs:175:48

(the key is changed in this message for privacy reasons)

The first time the key just doesn't load. When I try to open the key the second time ALFIS crashes.

Security: disclosing real IP addresses of users

Some users register in the zone .ygg domains with IP addresses from the internet (See block 26.).
Other users who will visit the site using this domain name will disclose their real IP addresses to the owner of the resource.
Because It is not obvious that the .ygg zone can have addresses from the Internet.
I think it is necessary for each zone to map a range of IP addresses for which a domain can be registered in this zone.
Or something similar.

Add ARM64 build

It looks like Rust can easily build cross platform builds with aarch64-unknown-linux-gnu target.

Can you try to build ARM64 version for ARM boards?

[Question] How often will the domains be reset, if ever?

Unless something's wrong with my connection, I received the Syncing Finished message after downloading 44 blocks (whereas when I made my first issue, there were at least 398 blocks).

I presume that the whole chain was reset due to implementing predefined TLDs to prevent abuse (#101 (comment)). So, I wanted to ask if there was a reset and how often the chain my reset. That way I know when to remine the domains I have already mined (haven't mined any yet, but in the hypothetical, I will have already mined at least a couple).

This question exists in the form of an issue as I cannot find any documentation, not even a wiki page on Alfis. Thanks!

Feature request: Info about the mining process

Is it possible to display somewhere in this window how long the mining process has already been going on and the estimated / approximate time of the end of mining? And also, display during mining, which records will be added to the block.

request

And the same thing, when mining the key.

CONSOLE SECURITY ERROR

I installed the rust binaries from installation script and added rust directory to $PASH. Then i build Alfis in custom directory /tmp/alfis and give 0777 permission for this directory. After cargo run all key commands cause CONSOLE SECURITY ERROR

Я установил раст через установочный скрипт, а не из пакетного менеджера, прописал его в системное окружение PATH, доставил нужную либу. Далее я склонировал и собрал проект Alfis в кастомной дирректории /tmp/alfis, после чего дал полные 0777 права на данную папку для избежания проблем с разрешениями. После запуска программы с помощью cargo run любые команды, связанные с ключами, вызывают ошибку CONSOLE SECURITY ERROR. Логи приложены ниже.

Logs:

ALFIS 0.1.0
Generated temporary keystore. Please, generate full-privileged keys.
No blocks found in DB
Started node listener on 127.0.0.1:4244
Command {"cmd":"loaded"}
Evaluating keystoreChanged('', 'B3114E836CFF4DFD06C13FE98D7BBD7ECD9AF611055C470F2EC41BD1F2C04514');
Created connection to peer 127.0.0.1:44421
Created connection to peer 127.0.0.1:10000
Created connection to peer 127.0.0.1:10001
Created connection to peer 127.0.0.1:10002
Event for socket 1 is Event { token: Token(1), readable: false, writable: true, error: true, read_closed: true, write_closed: true, priority: false, aio: false, lio: false }
Peer connection 127.0.0.1:44421 has shut down
Event for socket 2 is Event { token: Token(2), readable: false, writable: true, error: true, read_closed: true, write_closed: true, priority: false, aio: false, lio: false }
Peer connection 127.0.0.1:10000 has shut down
Event for socket 3 is Event { token: Token(3), readable: false, writable: true, error: true, read_closed: true, write_closed: true, priority: false, aio: false, lio: false }
Peer connection 127.0.0.1:10001 has shut down
Event for socket 4 is Event { token: Token(4), readable: false, writable: true, error: true, read_closed: true, write_closed: true, priority: false, aio: false, lio: false }
Peer connection 127.0.0.1:10002 has shut down
Command {"cmd":"createKey"}
Got event from bus KeyGeneratorStarted
Evaluating showMiningIndicator(true);
CONSOLE SECURITY ERROR Not allowed to navigate top frame to data URL 'data:text/html,%3C%21DOCTYPE%20html%3E%0A%3Chtml%3E%0A%3Chead%3E%0A%20%20%20%20%3Cmeta%20charset%3D%22utf-8%22%3E%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1%22%3E%0A%20%20%20%20%3Ctitle%3EWyrd%3C%2Ftitle%3E%0A%20%20%20%20%3Cstyle%20type%3D%22text%2Fcss%22%3E%2F%2A%21%20bulma.io%20v0.8.0%20%7C%20MIT%20License%20%7C%20github.com%2Fjgthms%2Fbulma%20%2A%2F%0A%40-webkit-keyframes%20spinAround%20%7B%0A%20%20from%20%7B%0A%20%20%20%20transform%3A%20rota...0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fform%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%0A%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%0A%20%20%20%20%3C%2Fdiv%3E%20%3C%21--%20columns%20--%3E%0A%3C%2Fdiv%3E%0A%0A%3Cdiv%20class%3D%22footer%20is-hidden%22%3ESome%20footer%20text%20is%20here%3C%2Fdiv%3E%0A%3C%2Fbody%3E%0A%3C%2Fhtml%3E?#'.
Generated keypair: Keystore { private_key: *** , public_key: 000000EFE074479DECDC892694D87585DE79DDD3FCAF1659305A9CE914121B61, path: "", seed: [119, 252, 128, 37, 161, 191, 147, 180, 177, 33, 159, 165, 102, 253, 172, 246, 42, 42, 50, 244, 193, 200, 26, 233, 233, 152, 68, 173, 75, 125, 124, 131] }
Key mined successfully: 000000EFE074479DECDC892694D87585DE79DDD3FCAF1659305A9CE914121B61
Got event from bus KeyCreated { path: "", public: "000000EFE074479DECDC892694D87585DE79DDD3FCAF1659305A9CE914121B61" }
Evaluating keystoreChanged('', '000000EFE074479DECDC892694D87585DE79DDD3FCAF1659305A9CE914121B61');
Keystore mining finished
Keystore mining finished
Keystore mining finished
Got event from bus KeyGeneratorStopped
Evaluating showMiningIndicator(false);
Command {"cmd":"saveKey"}
Key file saved to /home/nikat/Documents/alfis
Got event from bus KeySaved { path: "/home/nikat/Documents/alfis", public: "000000EFE074479DECDC892694D87585DE79DDD3FCAF1659305A9CE914121B61" }
Evaluating keystoreChanged('/home/nikat/Documents/alfis', '000000EFE074479DECDC892694D87585DE79DDD3FCAF1659305A9CE914121B61');
CONSOLE SECURITY ERROR Not allowed to navigate top frame to data URL 'data:text/html,%3C%21DOCTYPE%20html%3E%0A%3Chtml%3E%0A%3Chead%3E%0A%20%20%20%20%3Cmeta%20charset%3D%22utf-8%22%3E%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1%22%3E%0A%20%20%20%20%3Ctitle%3EWyrd%3C%2Ftitle%3E%0A%20%20%20%20%3Cstyle%20type%3D%22text%2Fcss%22%3E%2F%2A%21%20bulma.io%20v0.8.0%20%7C%20MIT%20License%20%7C%20github.com%2Fjgthms%2Fbulma%20%2A%2F%0A%40-webkit-keyframes%20spinAround%20%7B%0A%20%20from%20%7B%0A%20%20%20%20transform%3A%20rota...0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fform%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%0A%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%0A%20%20%20%20%3C%2Fdiv%3E%20%3C%21--%20columns%20--%3E%0A%3C%2Fdiv%3E%0A%0A%3Cdiv%20class%3D%22footer%20is-hidden%22%3ESome%20footer%20text%20is%20here%3C%2Fdiv%3E%0A%3C%2Fbody%3E%0A%3C%2Fhtml%3E?#'.
Command {"cmd":"createKey"}
Got event from bus KeyGeneratorStarted
Evaluating showMiningIndicator(true);
CONSOLE SECURITY ERROR Not allowed to navigate top frame to data URL 'data:text/html,%3C%21DOCTYPE%20html%3E%0A%3Chtml%3E%0A%3Chead%3E%0A%20%20%20%20%3Cmeta%20charset%3D%22utf-8%22%3E%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1%22%3E%0A%20%20%20%20%3Ctitle%3EWyrd%3C%2Ftitle%3E%0A%20%20%20%20%3Cstyle%20type%3D%22text%2Fcss%22%3E%2F%2A%21%20bulma.io%20v0.8.0%20%7C%20MIT%20License%20%7C%20github.com%2Fjgthms%2Fbulma%20%2A%2F%0A%40-webkit-keyframes%20spinAround%20%7B%0A%20%20from%20%7B%0A%20%20%20%20transform%3A%20rota...0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fform%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%0A%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%0A%20%20%20%20%3C%2Fdiv%3E%20%3C%21--%20columns%20--%3E%0A%3C%2Fdiv%3E%0A%0A%3Cdiv%20class%3D%22footer%20is-hidden%22%3ESome%20footer%20text%20is%20here%3C%2Fdiv%3E%0A%3C%2Fbody%3E%0A%3C%2Fhtml%3E?#'.

Feature request: export list of domains to DNS-resolvers compatible config format (unbound, dnsmasq, bind, etc)

I want to use specialized professional dns-resolvers, like Unbound/dnsmasq/Bind/PowerDNS or etc, for resolving Alfis domains.

Part 1 - export domain database to DNS-resolver compatible config file

I have already a localhosted resolver (in my case - it is Unbound), which used for filtering domains by many adblock lists (where each list - separated config file).
Also, this resolver used for routing domain zones, like onion/exit to Tor DNS-proxy, or i2p/b32 to I2P DNS-proxy.

I want something like:

  • start sync of alfis domain lists by cron;
  • export domain zones (ygg, yy, etc) to config file, compatibled with one of most popular DNS-resolvers;
  • use specialized professional DNS-resolver for resolving Alfis domains, not an Alfis program.

Result may be realized as cron job, like:

alfis-sync -c /etc/alfis.conf && \
  alfis-export -c /etc/alfis.conf --format unbound > /etc/unbound/unbound.alfis.conf && \
  unbound-control reload

Request 1: Please, improve export Alfis domain database to resolver-compatible config file.

I know, that power of Alfis is in number of users, which run Alfis service. But if I use Alfis on my laptop, which configured to block all incoming connections, then no difference for network, how I use Alfis - by cron, or as a service, because my influence to domains database consistency is very insignificant.

Part 2 - separate Alfis to two programs: Alfis-as-domain-manager and Alfis-as-domain-resolver

Alfis as DNS-resolver is young program, was have (see #40), may be have now or will have an errors, which already resolved in professional DNS resolvers, like Unbound/dnsmasq/PowerDNS/Bind.
Also, Alfis dublicate long-established habit of use: filter output domain names by special configured DNS-proxy (/etc/hosts, dnsmasq/unbound, PiHole).
So, dns-resolving part of Alfis have dissonance with long time practice (domain filtering by adblock lists), have not advantage in domain resolving (comparing to professional DNS resolvers), and may be demanded by low count of users.

Request 2: Please, separate Alfis to two programs: Alfis-as-domain-manager and Alfis-as-domain-resolver.
Request 3: Please, remove domain-resolver part of Alfis from main executable program.

Displaying my domains after loading blocks

It's just a wish for the future. If I delete the database and run ALFIS with the key, then after loading the blocks, my domains are not displayed. To display them, I have to restart ALFIS. I would like everything to be displayed without restarting.

Very unstable connection to nodes

Node connections are very unstable. They are interrupted and created every 2-3 seconds.
At the same time, I use the network, visit sites, ping nodes without any problems.
Connections are interrupted even between nodes inside my local network (IPv4).

scr

scr2

scr3

v0.4.34 Something is wrong with swarm connections, closing all

This is written endlessly in the log:

09:51:35 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:35 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:35 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:35 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:36 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:36 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:36 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:36 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:37 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:37 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:37 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:37 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:38 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:38 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:38 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:38 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:39 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:39 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:39 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:39 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:40 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:40 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:40 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:40 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:41 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:41 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:41 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:41 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:42 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:42 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:42 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:42 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:43 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:43 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:43 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:43 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:44 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:44 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:44 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:44 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:45 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:45 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:45 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:45 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:46 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:46 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:46 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:46 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:47 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:47 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:47 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:47 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:48 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:48 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:48 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:48 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:49 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:49 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:49 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:49 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:50 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:50 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:50 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:50 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:51 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:51 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:51 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:51 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:52 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:52 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:52 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:52 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:53 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:53 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:53 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:53 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:54 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:54 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:54 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:54 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:55 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:55 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:55 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:55 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:56 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:56 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:56 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.
09:51:56 [WARN] alfis::p2p::network: Something is wrong with swarm connections, closing all.

No connection established with nodes.

Alfis tries to connect to itself as an external peer - is this normal?

It looks like Alfis is trying to connect to itself.
"Created connection to peer own_IP:4244" and "Peer connection own_IP:4244 has shut down" repeated in a loop.

It may make sense to determine the addresses of the host on which Alfis is running and do not try to connect to these addresses.

2021-03-30 21:09:32,826 INFO  [alfis::web_ui] Current blockchain height is 14
2021-03-30 21:09:32,827 INFO  [alfis::blockchain::chain] Got zone data {"name":"yy","difficulty":20}
2021-03-30 21:09:32,827 INFO  [alfis::blockchain::chain] Got zone data {"name":"ygg","difficulty":24}
2021-03-30 21:09:32,827 INFO  [alfis::blockchain::chain] Got zone data {"name":"mesh","difficulty":20}
2021-03-30 21:09:33,008 INFO  [alfis::p2p::network] Received block 14
2021-03-30 21:09:33,169 WARN  [alfis::blockchain::chain] Ignoring block 14, we already have it
2021-03-30 21:10:08,972 INFO  [alfis::web_ui] Loaded keystore with key: 268E47DD5268A2EA8BC36668D2E00594E76ACD5CACA7CBBAB9F6E63BF75C4A82
2021-03-30 21:10:11,295 INFO  [alfis::p2p::peers] Created connection to peer 46.229.214.81:4244
2021-03-30 21:10:11,295 INFO  [alfis::p2p::peers] Created connection to peer [202:e220:4a35:c244:3440:83e3:3d2f:e0f4]:4244
2021-03-30 21:10:11,295 INFO  [alfis::p2p::peers] Created connection to peer [219:45d:824:2cb4:fd4f:dd40:fec5:3b7d]:4244
2021-03-30 21:10:11,295 INFO  [alfis::p2p::peers] Created connection to peer [203:8b1a::dae6:8827:90d:790a]:4244
2021-03-30 21:10:16,410 INFO  [alfis::p2p::peers] Created connection to peer 77.247.225.234:4244
2021-03-30 21:10:16,410 INFO  [alfis::p2p::peers] Created connection to peer [220:9b61:5f85:f842:f457:a63d:8c26:e06e]:4244
2021-03-30 21:10:16,426 INFO  [alfis::p2p::peers] Created connection to peer [203:xxxx:741b:42:3214:1234:xxxx:xxxx]:4244 ! Here is my Ygg IP !
2021-03-30 21:10:16,426 WARN  [alfis::p2p::network] Detected connection loop, ignoring IP: 203:xxxx:741b:42:3214:1234:xxxx:xxxx ! Here is my Ygg IP !
2021-03-30 21:10:16,426 WARN  [alfis::p2p::network] Error sending hello Обрыв канала (os error 32)
2021-03-30 21:10:16,426 INFO  [alfis::p2p::peers] Peer connection [203:xxxx:741b:42:3214:1234:xxxx:xxxx]:4244 has shut down ! Here is my Ygg IP !
2021-03-30 21:10:17,051 INFO  [alfis::p2p::peers] Created connection to peer xx.xx.xx.xxx:4244 ! Here is my IP !
2021-03-30 21:10:52,149 INFO  [alfis::p2p::network] Accepted connection from: [219:45d:824:2cb4:fd4f:dd40:fec5:3b7d]:55801 to local IP: [203:xxxx:741b:42:3214:1234:xxxx:xxxx]:4244
2021-03-30 21:11:09,730 INFO  [alfis::p2p::peers] Peer connection [224:aeef:d38b:9fe9:5d47:e9d3:6055:a774]:4244 has shut down
2021-03-30 21:11:18,738 INFO  [alfis::p2p::peers] Created connection to peer [203:xxxx:741b:42:3214:1234:xxxx:xxxx]:4244 ! Here is my Ygg IP !
2021-03-30 21:11:18,738 WARN  [alfis::p2p::network] Detected connection loop, ignoring IP: 203:xxxx:741b:42:3214:1234:xxxx:xxxx ! Here is my Ygg IP !
2021-03-30 21:11:18,738 WARN  [alfis::p2p::network] Error sending hello Обрыв канала (os error 32)
2021-03-30 21:11:18,738 INFO  [alfis::p2p::peers] Peer connection [203:xxxx:741b:42:3214:1234:xxxx:xxxx]:4244 has shut down ! Here is my Ygg IP !
2021-03-30 21:12:13,023 INFO  [alfis::p2p::peers] Created connection to peer [224:aeef:d38b:9fe9:5d47:e9d3:6055:a774]:4244
2021-03-30 21:12:22,030 INFO  [alfis::p2p::peers] Created connection to peer [203:xxxx:741b:42:3214:1234:xxxx:xxxx]:4244 ! Here is my Ygg IP !
2021-03-30 21:12:22,030 WARN  [alfis::p2p::network] Detected connection loop, ignoring IP: 203:xxxx:741b:42:3214:1234:xxxx:xxxx ! Here is my Ygg IP !
2021-03-30 21:12:22,031 WARN  [alfis::p2p::network] Error sending hello Обрыв канала (os error 32)
2021-03-30 21:12:22,031 INFO  [alfis::p2p::peers] Peer connection [203:xxxx:741b:42:3214:1234:xxxx:xxxx]:4244 has shut down ! Here is my Ygg IP !
2021-03-30 21:12:27,554 INFO  [alfis::p2p::peers] Peer connection xx.xx.xx.xxx:4244 has shut down ! Here is my IP !

Unable to set contact information

I tried to provide a link to the contact information, and got this:

IMG_6001

Without specifying the contact information, mining started normally

Multiple keys in one instance

I would like to be able to load multiple keys in a single ALFIS instance.

For example, I've mined three domains into three different keys. To be able to sign blocks, I have to run three instances with different keys, but this is redundant. Three instances are not needed for either nogui DNS or mining...

Thus, it would be good to run one nogui-instance on the server, which would work as DNS and sign blocks with three different keys.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.