Перейти к содержанию
  • запись
    1
  • комментариев
    9
  • просмотров
    7 449

Создание собственной ноды по добыче PEERCOIN.


AndreyNag

9 171 просмотр

Привет Всем.

Постепенно, читая форум и блоги, перехожу из разряда "читателя" в когорту "писателей". Однако путь этот тернист и густо усеян граблями разного калибра.

На момент начала этого блога у меня лишь поверхностные понятия о том как сделать рабочую ноду. Поэтому данный текст будет скорее не блогом, а диалогом для достижения общей цели: познания непознанного.

Заранее прошу прощения как за глупые вопросы, так и за такие же ответы.

Окунувшись с головой в тернии добычи криптовалют я нашел много инфы о биткоине, лайте, некоторых других криптах, но именно о пирке нигде не нашел (не говорю что такого нет в природе) сценария по поднятии такой ноды. С кондачка эта вершина мне не даётся, вот уже с третьей попытки. На основе личного опыта и мудрости старших, которые говорили, что лучше всего поймёш тогда, когда сам другому объяснишь. Да и в 99% правильно заданный в письменном виде вопрос открывал для меня истину и решение находилось само. :unsure:

На гитхабе нашел https://github.com/UNOMP/unified-node-open-mining-portal и стал как обычно дорабатывать напильником.

Установил unomp, подкорректировал два конфига, но всё равно что-то не пускает меня в "рай".

Собственно пул запускается нормально, но что-то не так с кошельками, указанными в конфигах. Один я делал с помощью perrcoin unity на windows компе, второй для пробы сгенерировал на https://wallet.peercointalk.org/?culture=ru.

Вот что на данный момент выдаёт мне журнал:

[2016-03-10 17:57:04.378] [INFO] [default] - New Relic[2016-03-10 17:57:04.382] [DEBUG] [default] - NewRelic Monitor New Relic initiated[2016-03-10 17:57:04.387] [INFO] [default] - Setting POSIX[2016-03-10 17:57:04.387] [INFO] [default] - POSIX Set[2016-03-10 17:57:04.388] [INFO] [default] - UID Set[2016-03-10 17:57:04.388] [DEBUG] [default] - POSIX Connection Limit Raised to 100K concurrent connections, now running as non-root user: 1000[2016-03-10 17:57:04.388] [INFO] [default] - POSIX Msg[2016-03-10 17:57:04.388] [INFO] [default] - Run Workers[2016-03-10 17:57:04.913] [DEBUG] [default] - Master PoolSpawner Spawned 1 pool(s) on 2 thread(s)[2016-03-10 17:57:05.628] [INFO] [default] - New Relic[2016-03-10 17:57:05.638] [INFO] [default] - Setting POSIX[2016-03-10 17:57:05.639] [INFO] [default] - POSIX Set[2016-03-10 17:57:05.639] [INFO] [default] - UID Set[2016-03-10 17:57:05.639] [DEBUG] [default] - POSIX Connection Limit Raised to 100K concurrent connections, now running as non-root user: 1000[2016-03-10 17:57:05.640] [INFO] [default] - POSIX Msg[2016-03-10 17:57:05.640] [INFO] [default] - Run Workers[2016-03-10 17:57:05.665] [INFO] [default] - Switching Setup Thread 1 Loading last proxy state from redisnode_redis: Warning: Redis server does not require a password, but a password was supplied.[2016-03-10 17:57:05.687] [DEBUG] [default] - Pool peercoin Thread 1 Share processing setup with redis (127.0.0.1:6379)node_redis: Warning: Redis server does not require a password, but a password was supplied.[2016-03-10 17:57:05.688] [DEBUG] [default] - Switching Setup Thread 1 Last proxy state loaded from redis[2016-03-10 17:57:05.698] [WARN] [default] - Switching Setup Thread 1 Switching "switch1" listening for sha256 on port 3333 into peercoin[2016-03-10 17:57:05.756] [DEBUG] [default] - Pool peercoin Thread 1 Could not start pool, error with init batch RPC call: {"code":-32700,"message":"Parse error"}[2016-03-10 17:57:05.965] [INFO] [default] - New Relic[2016-03-10 17:57:05.975] [INFO] [default] - Setting POSIX[2016-03-10 17:57:05.976] [INFO] [default] - POSIX Set[2016-03-10 17:57:05.977] [INFO] [default] - UID Set[2016-03-10 17:57:05.977] [DEBUG] [default] - POSIX Connection Limit Raised to 100K concurrent connections, now running as non-root user: 1000[2016-03-10 17:57:05.977] [INFO] [default] - POSIX Msg[2016-03-10 17:57:05.977] [INFO] [default] - Run Workers[2016-03-10 17:57:06.004] [INFO] [default] - Switching Setup Thread 2 Loading last proxy state from redisnode_redis: Warning: Redis server does not require a password, but a password was supplied.[2016-03-10 17:57:06.026] [DEBUG] [default] - Pool peercoin Thread 2 Share processing setup with redis (127.0.0.1:6379)node_redis: Warning: Redis server does not require a password, but a password was supplied.[2016-03-10 17:57:06.027] [DEBUG] [default] - Switching Setup Thread 2 Last proxy state loaded from redis[2016-03-10 17:57:06.041] [WARN] [default] - Switching Setup Thread 2 Switching "switch1" listening for sha256 on port 3333 into peercoin[2016-03-10 17:57:06.045] [DEBUG] [default] - Pool peercoin Thread 2 Could not start pool, error with init batch RPC call: {"code":-32700,"message":"Parse error"}[2016-03-10 17:57:14.414] [DEBUG] [default] - Master CLI CLI listening on port 17117[2016-03-10 17:57:15.415] [INFO] [default] - New Relic[2016-03-10 17:57:15.425] [INFO] [default] - Setting POSIX[2016-03-10 17:57:15.426] [INFO] [default] - POSIX Set[2016-03-10 17:57:15.426] [INFO] [default] - UID Set[2016-03-10 17:57:15.426] [DEBUG] [default] - POSIX Connection Limit Raised to 100K concurrent connections, now running as non-root user: 1000[2016-03-10 17:57:15.427] [INFO] [default] - POSIX Msg[2016-03-10 17:57:15.427] [INFO] [default] - Run Workers[2016-03-10 17:57:15.430] [INFO] [default] - New Relic[2016-03-10 17:57:15.441] [INFO] [default] - Setting POSIX[2016-03-10 17:57:15.442] [INFO] [default] - POSIX Set[2016-03-10 17:57:15.442] [INFO] [default] - UID Set[2016-03-10 17:57:15.443] [DEBUG] [default] - POSIX Connection Limit Raised to 100K concurrent connections, now running as non-root user: 1000[2016-03-10 17:57:15.443] [INFO] [default] - POSIX Msg[2016-03-10 17:57:15.444] [INFO] [default] - Run Workersnode_redis: Warning: Redis server does not require a password, but a password was supplied.[2016-03-10 17:57:15.469] [FATAL] [default] - Payments peercoin Daemon does not own pool address - payment processing can not be done with this daemon, {"isvalid":true,"address":"PLG8Yi4zzzjmiLGgFGxSe2AtyUwJg1XEWM","ismine":false} events.js:72        throw er; // Unhandled 'error' event              ^Error: bind EACCES    at errnoException (net.js:901:11)    at net.js:1069:30    at Object.4:1 (cluster.js:592:5)    at handleResponse (cluster.js:171:41)    at respond (cluster.js:192:5)    at handleMessage (cluster.js:202:5)    at process.EventEmitter.emit (events.js:117:20)    at handleMessage (child_process.js:318:10)    at Pipe.channel.onread (child_process.js:345:11)[2016-03-10 17:57:15.571] [ERROR] [default] - Master Website Website process died, spawning replacement...[2016-03-10 17:57:18.428] [INFO] [default] - New Relic[2016-03-10 17:57:18.436] [INFO] [default] - Setting POSIX[2016-03-10 17:57:18.437] [INFO] [default] - POSIX Set[2016-03-10 17:57:18.437] [INFO] [default] - UID Set[2016-03-10 17:57:18.437] [DEBUG] [default] - POSIX Connection Limit Raised to 100K concurrent connections, now running as non-root user: 1000[2016-03-10 17:57:18.438] [INFO] [default] - POSIX Msg[2016-03-10 17:57:18.438] [INFO] [default] - Run Workers events.js:72        throw er; // Unhandled 'error' event              ^Error: bind EACCES    at errnoException (net.js:901:11)    at net.js:1069:30    at Object.5:1 (cluster.js:592:5)    at handleResponse (cluster.js:171:41)    at respond (cluster.js:192:5)    at handleMessage (cluster.js:202:5)    at process.EventEmitter.emit (events.js:117:20)    at handleMessage (child_process.js:318:10)    at Pipe.channel.onread (child_process.js:345:11)[2016-03-10 17:57:18.540] [ERROR] [default] - Master Website Website process died, spawning replacement...[2016-03-10 17:57:21.606] [INFO] [default] - New Relic[2016-03-10 17:57:21.616] [INFO] [default] - Setting POSIX[2016-03-10 17:57:21.617] [INFO] [default] - POSIX Set[2016-03-10 17:57:21.617] [INFO] [default] - UID Set[2016-03-10 17:57:21.618] [DEBUG] [default] - POSIX Connection Limit Raised to 100K concurrent connections, now running as non-root user: 1000[2016-03-10 17:57:21.618] [INFO] [default] - POSIX Msg[2016-03-10 17:57:21.618] [INFO] [default] - Run Workers events.js:72        throw er; // Unhandled 'error' event              ^Error: bind EACCES    at errnoException (net.js:901:11)    at net.js:1069:30    at Object.6:1 (cluster.js:592:5)    at handleResponse (cluster.js:171:41)    at respond (cluster.js:192:5)    at handleMessage (cluster.js:202:5)    at process.EventEmitter.emit (events.js:117:20)    at handleMessage (child_process.js:318:10)    at Pipe.channel.onread (child_process.js:345:11)[2016-03-10 17:57:21.744] [ERROR] [default] - Master Website Website process died, spawning replacement...[2016-03-10 17:57:24.602] [INFO] [default] - New Relic[2016-03-10 17:57:24.611] [INFO] [default] - Setting POSIX[2016-03-10 17:57:24.611] [INFO] [default] - POSIX Set[2016-03-10 17:57:24.612] [INFO] [default] - UID Set[2016-03-10 17:57:24.612] [DEBUG] [default] - POSIX Connection Limit Raised to 100K concurrent connections, now running as non-root user: 1000[2016-03-10 17:57:24.612] [INFO] [default] - POSIX Msg[2016-03-10 17:57:24.612] [INFO] [default] - Run Workers

 

Сразу скажу, что демон пирки запущен и цепочка синхронизирована.

received block e11ce8139bdd238814a5SetBestChain: new best=e11ce8139bdd238814a5  height=225729  trust=7835503740556237  moneysupply=23037166.384371ProcessBlock: ACCEPTED2016-03-10 14:42:27 UTC Flushing wallet.datFlushed wallet.dat 44msResendWalletTransactions()Added 1 addresses from 107.170.246.39: 29 tried, 9503 newAdded 165 addresses from 68.41.71.107: 29 tried, 9467 newAdded 81 addresses from 68.41.71.107: 29 tried, 9443 newaskfor block 67ae5ce209168401f21f   0sending getdata: block 67ae5ce209168401f21faskfor block 67ae5ce209168401f21f   1457621176000000askfor block 67ae5ce209168401f21f   1457621296000000received block 67ae5ce209168401f21fSetBestChain: new best=67ae5ce209168401f21f  height=225730  trust=7835552333986421  moneysupply=23037167.464371ProcessBlock: ACCEPTEDgetblocks -1 to 00000000000000000000 limit 5002016-03-10 14:46:19 UTC Flushing wallet.datFlushed wallet.dat 10ms 

peercoin.json

 {    "enabled": true,    "coin": "peercoin.json",     "auxes": [ // Defines auxillery coins        {            "coin": "lottoshares.json",            "daemons": [ // It is reccomended to supply multiple daemons here for redundancy                {                    "host": "127.0.0.1",                    "port": 23327,                    "user": "lottosharesrpc",                    "password": "By66dCmyX44uUbA7P3qqXJQeT3Ywd8dZ4dJdfgxCAxbg"                }            ]        }    ],    "address": "PLG8Yi4zzzjmiLGgFGxSe2AtyUwJg1XEWM",     "rewardRecipients": {        "PLG8Yi4zzzjmiLGgFGxSe2AtyUwJg1XEWM": 1.5    },     "paymentProcessing": {        "enabled": true,        "paymentInterval": 600,        "minimumPayment": 9999999999,        "daemon": {            "host": "127.0.0.1",            "port": 19332,            "user": "bitcoinrpc",            "password": ""        }    },     "ports": {        "3008": {            "diff": 8        },        "3032": {            "diff": 32,            "varDiff": {                "minDiff": 8,                "maxDiff": 512,                "targetTime": 15,                "retargetTime": 90,                "variancePercent": 30            }        },        "3256": {            "diff": 256        }    },     "daemons": [        {            "host": "127.0.0.1",            "port": 19332,            "user": "bitcoinrpc",            "password": ""        }    ],     "p2p": {        "enabled": false,        "host": "127.0.0.1",        "port": 19333,        "disableTransactions": false    },     "mposMode": {        "enabled": false,        "host": "127.0.0.1",        "port": 3306,        "user": "me",        "password": "mypass",        "database": "ltc",        "checkPassword": false,        "autoCreateWorker": false    } }

config.json

{    "logLevel": "debug",    "logColors": true,     "cliPort": 17117,     "clustering": {        "enabled": true,        "forks": "auto"    },     "defaultPoolConfigs": {        "blockRefreshInterval": 1000,        "jobRebroadcastTimeout": 55,        "connectionTimeout": 600,        "emitInvalidBlockHashes": false,        "validateWorkerUsername": true,        "tcpProxyProtocol": false,        "banning": {            "enabled": true,            "time": 600,            "invalidPercent": 50,            "checkThreshold": 500,            "purgeInterval": 300        },        "redis": {            "host": "127.0.0.1",            "port": 6379,            "db": 0,            "password": ""        }    },     "website": {        "enabled": true,        "host": "0.0.0.0",        "siteTitle": "UNOMP Flash Beta",        "port": 88,        "stratumHost": "0.0.0.0",        "stats": {            "updateInterval": 60,            "historicalRetention": 43200,            "hashrateWindow": 300,            "graphColors": ["#058DC7", "#50B432", "#ED561B", "#DDDF00", "#24CBE5", "#64E572",            "#FF9655", "#FFF263", "#6AF9C4"]        },        "adminCenter": {            "enabled": true,            "password": "password"        }    },     "redis": {        "host": "127.0.0.1",        "port": 6379,        "db": 0,        "password": ""    },     "switching": {        "switch1": {            "enabled": true,            "algorithm": "sha256",            "ports": {                "3333": {                    "diff": 10,                    "varDiff": {                        "minDiff": 16,                        "maxDiff": 10240,                        "targetTime": 15,                        "retargetTime": 90,                        "variancePercent": 30                    }                }            }        },        "switch2": {            "enabled": false,            "algorithm": "scrypt",            "ports": {                "4444": {                    "diff": 10,                    "varDiff": {                        "minDiff": 16,                        "maxDiff": 512,                        "targetTime": 15,                        "retargetTime": 90,                        "variancePercent": 30                    }                }            }        },        "switch3": {            "enabled": false,            "algorithm": "x11",            "ports": {                "5555": {                    "diff": 0.001,                    "varDiff": {                        "minDiff": 0.001,                        "maxDiff": 1,                         "targetTime": 15,                         "retargetTime": 60,                         "variancePercent": 30                     }                }            }        }    },     "profitSwitch": {        "enabled": false,        "updateInterval": 600,        "depth": 0.90,        "usePoloniex": true,        "useCryptsy": true,        "useBittrex": true    }}

Больше всего конечно убивает запись

 

[2016-03-10 17:57:06.045] [DEBUG] [default] - Pool peercoin Thread 2 Could not start pool, error with init batch RPC call: {"code":-32700,"message":"Parse error"}

Редиска запущена.

Что ему еще надо? Пока не пойму.

Буду рад любым конструктивным мыслям и помощи.

Спасибо за внимание.

9 Комментариев


Рекомендуемые комментарии

Думается мне, что проблема в формате RPC команд кошелька (отличается чуток от стандартного). Пока анализирую файл bitcoinrpc.cpp (сравниваю хотя бы бегло с исходниками работающих кошельков с uNOMP).

1) А вообще как вариант - реализация универсальной прослойки между uNomp и "несговорчивыми" монетами. Но в этом направлении у меня пока катастрофически не хватает знаний. Например: как посмотреть полный лог общения пула с демоном кошелька?

2) Не пробовал ли форк NOMPа реализованного для NMC?

Ссылка на комментарий
root2pool@che2pool:~/ppcoin/src$ make -f makefile.unix
/bin/sh ../share/genbuild.sh obj/build.h
g++ -c -pthread -Wall -Wextra -Wno-sign-compare -Wno-invalid-offsetof -Wno-unused-parameter -Wformat -Wformat-security -g -DBOOST_SPIRIT_THREADSAFE -I/home/root2pool/ppcoin/src -I/home/root2pool/ppcoin/src/obj -DUSE_UPNP=0 -DHAVE_BUILD_INFO -fno-stack-protector -fstack-protector-all -Wstack-protector -Wl,-z,relro -Wl,-z,now -D_FORTIFY_SOURCE=2 -O2 -MMD -o obj/key.o key.cpp
key.cpp:123:6: error: prototype for ‘void CKey::SetCompressedPubKey(bool)’ does not match any in class ‘CKey’
void CKey::SetCompressedPubKey(bool fCompressed)
^
In file included from key.cpp:10:0:
key.h:116:10: error: candidate is: void CKey::SetCompressedPubKey()
void SetCompressedPubKey();
^
makefile.unix:126: recipe for target 'obj/key.o' failed
make: *** [obj/key.o] Error 1
Помогите пожалуйста разобраться что ему нужно?
Ссылка на комментарий
root2pool@che2pool:~/ppcoin/src$ make -f makefile.unix
/bin/sh ../share/genbuild.sh obj/build.h
g++ -c -pthread -Wall -Wextra -Wno-sign-compare -Wno-invalid-offsetof -Wno-unused-parameter -Wformat -Wformat-security -g -DBOOST_SPIRIT_THREADSAFE -I/home/root2pool/ppcoin/src -I/home/root2pool/ppcoin/src/obj -DUSE_UPNP=0 -DHAVE_BUILD_INFO -fno-stack-protector -fstack-protector-all -Wstack-protector -Wl,-z,relro -Wl,-z,now -D_FORTIFY_SOURCE=2 -O2 -MMD -o obj/key.o key.cpp
key.cpp:123:6: error: prototype for ‘void CKey::SetCompressedPubKey(bool)’ does not match any in class ‘CKey’
 void CKey::SetCompressedPubKey(bool fCompressed)
      ^
In file included from key.cpp:10:0:
key.h:116:10: error: candidate is: void CKey::SetCompressedPubKey()
     void SetCompressedPubKey();
          ^
makefile.unix:126: recipe for target 'obj/key.o' failed
make: *** [obj/key.o] Error 1
Помогите пожалуйста разобраться что ему нужно?

 

void CKey::SetCompressedPubKey(bool fCompressed)

^

In file included from key.cpp:10:0:

key.h:116:10: error: candidate is:void CKey::SetCompressedPubKey(bool fCompressed)

^

In file included from key.cpp:10:0:

key.h:116:10: error: candidate is: void CKey::SetCompressedPubKey()

void SetCompressedPubKey();

void SetCompressedPubKey();

выделил отличия.

надо пробовать в файле key.h в строке 116 изменить команду/описание команды из  void CKey::SetCompressedPubKey() в void CKey::SetCompressedPubKey(bool fCompressed)

либо в файле key.o привести строку к тому же виду что и в key.h/key.cpp 

Ссылка на комментарий

Можно конечно и поменять. Но! Поедполагсется, что слрцы хоть раз компильнулись и аричинс в другом.

Ссылка на комментарий

не соберется иначе, так так описана функция с доп параметром. Только приводя к общему виду.

Если победите без приведения - поделитесь пожалуйста

Ссылка на комментарий

К сожалению изменение типа на bool fCompressed не помогло. Стало ругаться на другое. Изменение key.cpp тоже не помогло. Вместо шаманского бубна необходимы глубокие знания в С++.
Скажите пожалуйста, а не проще ли для меня будет взять готовый бинарник? Хотя вероятнее всего, что этот вариант допилен для совместимости с unomp. Я уже пробовал из главных сырцов собирать демона кошелька. Сам демон работает, но синтаксис RPC не совпадает с тем, что ждет unomp.

Ссылка на комментарий

Очередная засада: Несколько раз запускал демона, но он каждый раз отваливается по непонятным мне причинам. В журнале есть вот такие записи. К стати и стоковый демон и специализированный ведут себя одинаково.
 

2016-04-06 20:32:28 UTC sending getdata: block 7e51f6bef1ba88f87ba3
2016-04-06 20:32:28 UTC sending getdata: block 45bded61813d2c853ff2
2016-04-06 20:32:28 UTC sending getdata: block 4b673a867592aec9d628
2016-04-06 20:32:28 UTC sending getdata: block 2ae10e71b775158ba0d5
2016-04-06 20:32:28 UTC sending getdata: block 9c9fdf6ab2c2eeed8632
2016-04-06 20:32:28 UTC sending getdata: block fd62fcc7bdc310aa447f
2016-04-06 20:32:28 UTC sending getdata: block eed09ca2350142b5deda
2016-04-06 20:32:28 UTC sending getdata: block 1bfa7366d737a4abe2a1
2016-04-06 20:32:28 UTC sending getdata: block b3889879a6cdb600e491
2016-04-06 20:32:28 UTC sending getdata: block 8a23198bf3812ffa4aec
2016-04-06 20:32:28 UTC sending getdata: block 93c66830ffba416912e5
2016-04-06 20:32:28 UTC sending getdata: block 0036e48244ada775cc36
2016-04-06 20:32:28 UTC sending getdata: block c3f5a2917d0d213fa9d9
2016-04-06 20:32:28 UTC sending getdata: block 1aeafe212c13ce13c843
2016-04-06 20:32:28 UTC received block d56052b5db7e97d90f80
2016-04-06 20:32:28 UTC ERROR: CTransaction::ReadFromDisk() : OpenBlockFile failed
2016-04-06 20:32:28 UTC ERROR: CheckProofOfStake() : INFO: read txPrev failed
2016-04-06 20:32:28 UTC WARNING: ProcessBlock(): check proof-of-stake failed for block d56052b5db7e97d90f80011b962628ae415564e90e7daa3dace9a55484f9c375
2016-04-06 20:32:28 UTC received block f65b3f67c21694e12831
2016-04-06 20:32:28 UTC ERROR: CTransaction::ReadFromDisk() : OpenBlockFile failed
2016-04-06 20:32:28 UTC ERROR: CheckProofOfStake() : INFO: read txPrev failed
2016-04-06 20:32:28 UTC WARNING: ProcessBlock(): check proof-of-stake failed for block f65b3f67c21694e12831782c5d26dc9559c810faf4f3139cce04ea500607bf35
2016-04-06 20:32:28 UTC received block 788851ecc53969f3179d
2016-04-06 20:32:28 UTC ERROR: CTransaction::ReadFromDisk() : OpenBlockFile failed
2016-04-06 20:32:28 UTC ERROR: CheckProofOfStake() : INFO: read txPrev failed
2016-04-06 20:32:28 UTC WARNING: ProcessBlock(): check proof-of-stake failed for block 788851ecc53969f3179d6458e4b850de270aae73722a6e484fe38267849e9877
2016-04-06 20:32:28 UTC received block 17430ffeb322d2079b86
2016-04-06 20:32:28 UTC ERROR: CTransaction::ReadFromDisk() : OpenBlockFile failed
2016-04-06 20:32:28 UTC ERROR: CheckProofOfStake() : INFO: read txPrev failed
2016-04-06 20:32:28 UTC WARNING: ProcessBlock(): check proof-of-stake failed for block 17430ffeb322d2079b868bc02016338b8c390f02d943ab495a8a8e832432d5d9
2016-04-06 20:32:28 UTC received block f021717b8b48bca82e7e
2016-04-06 20:32:28 UTC ERROR: CTransaction::ReadFromDisk() : OpenBlockFile failed
и так далее до конца файла.

Как только начинается "2016-04-06 20:32:28 UTC ERROR: CTransaction::ReadFromDisk() : OpenBlockFile failed", то через "полкилометра" журнал просто обрывается. 

Места на диске предостаточно. Что ему надо не понятно.

Ссылка на комментарий

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...