Перейти к содержанию

tseries

Рекомендуемые сообщения

Расскажу вам как сделать свой форк на основе Dash в системе windows.
 

Нам для этого понадобится, система Windows 7 , виртуальная машина ( я использовал VMware) , 
клиент github под windows (я использовал https://desktop.github.com/ ),
текстовый редактор Notepad++, SHH клиент Putty, Образ debian x64 
https://www.debian.org/distrib/netinst , любой редактор иконок,
http://kjur.github.io/jsrsasign/sample-ecdsa.html проверка и генератор паблик и приват ключей, 
http://www.unixtimestamp.com/ конвертер даты в тайм штамп в формате unix ,
notepad++ https://notepad-plus-plus.org/ .

1 Качаем ,устанавливаем все необходимое.

2 Создаем виртуальною машину под debian .

2.1 Жмем создать новая виртуальная машина
6757af88721f.jpg

2.2 Выбираем выборочный тип конфигурации, далее.
06187bd2b0fe.jpg

2.3 Выбираем версию виртуальной машины ( я выбрал 12), далее.

06fcc6b82c87.jpg
2.4 Выбираем я установлю операционною систему позже, далее.
af09c6a408ed.jpg
2.5 Выбираем Linux , Debian 8.x 64-bit, далее.
b41b7452b59d.jpg
2.6 Выбираем название виртуальной машины и где будет находится её файл конфигурации, далее.
754042b0538d.jpg
2.7 Выбираем количество процессор и ядер для виртуальной машины ,далее.
b1114168512e.jpg
2.8 Выбираем количество доступной памяти для виртуальной машины, далее
e3fcfa1b8e88.jpg
2.9 Выбираем тип сети – NAT, далее.
de92b05a3581.jpg
2.10 Выбираем тип контролера диска LSI Logic, далее
1cf8470e2082.jpg
2.11 Выбираем тип диска SCSI, далее
3ec2a41874b2.jpg
2.12 Выбираем создать виртуальный диск, далее.
669430880881.jpg
2.13 Выбираем количество памяти которое будет выделено под диск, далее.
b1f5b6cf35c6.jpg
2.14 Выбираем место куда сохранить наш диск, далее
2d6def90502d.jpg
2.15 Жмем готов , и идем заварить чай/кофе пока наш виртуальный диск конфигурируется.
6e3ed1695f73.jpg
2.16 Жмем изменить настройки, и выбираем наш файл образа Debian, ставил галку подключить при включение виртуальной машины, жмем (ОК) и включаем нашу виртуальною машину.
d8e8e16deff8.jpg

2.17 Выбираем Install,ентер.
97d769632ee7.png
2.18 Выбираем язык , ентер.
f938928c11d1.png
2.19 Выбираем страну , ентер.
7ce9c9fee0c2.png
2.20 Выбираем язык клавиатуры, ентер и дожидаемся загрузки компонентов .
bd2b6009304e.png
2.21 Даем системе имя, ентер.
7c8ae47008a7.png
2.22 Domin name оставляем пустым, ентер.
63841165fe07.png
2.23 Устанавливаем root пароль, ентер.
c8f78b795752.png
33245cbd57ef.png
2.24 Полное имя пользователя , пишем что угодно ,ентер.
28a1c44ea79d.png
2.25 Аккаунт пользователя пишем debian, ентер.
4fd32656d628.png
2.26 Устанавливаем пароль пользователя, ентер.
0d20a0587b57.png
88f2140fbb6b.png
2.27 Выбираем зону времени, ентер.
4bd29e1fa6dc.png
2.28 Делаем разметку диска, выбираем Guided - Use the entire disk, ентер.
bde962c5d0f8.png
2.29 Ентер.
0d37b39bbbde.png
2.28 Выбираем All files in one partition, ентер.
3c4bd3c3bbbc.png
2.29 Выбираем Finish partitioning and write changes to disk, ентер.
1163ca07c598.png
2.30 Выбираем Yes , ентер.
e5dcdf6c0655.png
2.31 Выбираем зеркало репозитория , ентер .
69b3cd55ed1a.png
d9c9b93fa35e.png
2.32 Можем оставить пустым ,ентер, и ждем немного.
1b5f8f517ac4.png
2.33 Ентер.
caf86e547b81.png
2.34 Выбираем только SSH server и Standard System Utilitits (Снимать и делать выбор пробелом!) , все остальное нам не нужно , снимаем выбор, енетр и
Ждем …
547525e8a0f4.png
2.35 Выбираем Yes , ентер.
a2850a31e3ee.png
2.36 Выбираем /dev/sda, ентер.
078a5b6def9c.png
2.37 Ентер.
5799389c4828.png
3. Конфигурируем порт форвард для подключения по SSH.

3.1 Заходим в VMware > Правка > редактор виртуальной сети.
e12b55bc6850.png
3.2 Жмем в открывшимся окне изменить параметры .
acb2eadf2f05.png
3.3 Выбираем сеть NAT и жмем параметры DHCP и ставим как у меня , что бы ip не менялся после каждой перезагрузки.
3ba88ca9c6db.png
3.4 Заходим в наше окно виртуальной машины и логинимся под нашим пользователем.
a44f32fe4369.png
b968684dbd1d.png
3.5 Пишем в терминал su , вводим пароль, пишем ifconfig и узнаем наш ip адреес.
dcb49168df08.png
3.6 Записываем наш ип адресс что в данном случае 192.168.200.129, и переходим в редактор виртуальной сети. Там выбираем параметры NAT, жмем добавить и прописываем порты и наш ip адресс. Далее жмем (ОК) в обоих окнах.
0719e5c1b1f7.png
b9a60559d4c9.png
7ebf90f7668e.png
3.7 Подключаемся к нашему SSH, и видим что все работает .
3f257375b442.png
cdf9db13db0f.png

4. Регистрируемся на
 

 https://github.com и форкаем репозиторий dash https://github.com/dashpay/dash

587f693c8833.png
661bc4cfbe93.png
5 Настраиваем Debian как сервер компиляции.

5.1 Переходим в наш терминал и пишем su и пароль от него .
Далее делаем



apt-get update, apt-get upgrade 

и пишем
 

apt-get install git ruby sudo apt-cacher-ng qemu-utils debootstrap lxc python-cheetah parted kpartx bridge-utils python-dev python-pip python2.7-dev libssl-dev

жмем ентер.

Изменено пользователем tseries
Ссылка на комментарий
Поделиться на другие сайты

974d6b005a49.png

b6f5486b76e5.png
55b02f533a57.png
85dd0fa46ebd.png
5.2 Даем права sudo права пользователю debian и конфигурируем LXC

 

adduser debian sudo
echo "%sudo ALL=NOPASSWD: /usr/bin/lxc-start" > /etc/sudoers.d/gitian-lxc
echo "cgroup  /sys/fs/cgroup  cgroup  defaults  0   0" >> /etc/fstab
echo '#!/bin/sh -e' > /etc/rc.local
echo 'brctl addbr br0' >> /etc/rc.local
echo 'ifconfig br0 10.0.3.2/24 up' >> /etc/rc.local
echo 'exit 0' >> /etc/rc.local
# make sure that USE_LXC is always set when logging in as debian,
# and configure LXC IP addresses
echo 'export USE_LXC=1' >> /home/debian/.profile
echo 'export GITIAN_HOST_IP=10.0.3.2' >> /home/debian/.profile
echo 'export LXC_GUEST_IP=10.0.3.5' >> /home/debian/.profile
reboot (перезагружаемся)



2d520fff615a.png
5.3 подключаемся по SSH входим по пользователем Debian.
5.4 Качаем и устанавливаем python-vm-builder


wget http://archive.ubuntu.com/ubuntu/pool/universe/v/vm-builder/vm-builder_0.12.4+bzr489.orig.tar.gz



Проверяем контрольною суму


echo "ec12e0070a007989561bfee5862c89a32c301992dd2771c4d5078ef1b3014f03 vm-builder_0.12.4+bzr489.orig.tar.gz" | sha256sum -c
# (verification -- must return OK)



Распаковываем.


tar -zxvf vm-builder_0.12.4+bzr489.orig.tar.gz



Переходим в папку которою распаковали


cd vm-builder-0.12.4+bzr489



Устанавливаем


sudo python setup.py install



Возвращаемся в предыдущую директорию
cd ..

5.5 Клонируем репозитории gitian и наш.

Gitian


git clone https://github.com/devrandom/gitian-builder.git



Mycointest
 
git clone https://github.com/mycointest/dash



6 сборка gitian builder и самого коина.

Переходим в директорию gitian исходников
 
cd gitian-builder



Cобираем исходники
 
bin/make-base-vm --lxc --arch amd64 --suite precise



Возврат

 
cd ..



c1c419629cf2.png



Пробуем собрать наш коин.
Переходим в директорию исходников коина.

 

cd ~debian/dash

Обновляем
 
git pull


Переходим в папку компилятора
 
cd ~debian/gitian-builder


Качаем зависимости,процесс не быстрый , ждем
 
make -C ../dash/depends download SOURCES_PATH=`pwd`/cache/common 


Собираем
 
/bin/gbuild --commit dash=v0.12.0.x ../dash/contrib/gitian-descriptors/gitian-win.yml

fb25e3c719f4.png

Открываем параллельно 2 сесии SSH , переходим в них в



cd gitian-builder
Дожидаемся создания соответсвующих логов в основной консоли
Пишым
tail -f var/install.log

tail -f var/build.log
и смотрим сборку

eea880c4c93e.png



В первый раз процесс достаточно долгий так как будет происходит компиляция и настройка всех зависимостей…

В конце получаем такой результат
b9737c55bd89.png
Подключаемся по ftp к нашему дебиан по sftp://127.0.0.1 , пользователь debian ,пароль от пользователя, порт 22222 на котором у нас SSH.

Переходим сюда
 
/home/debian/gitian-builder/build/out

и видим наши бинарники.
6a4fbfe34dfe.png

6 Чего мы в общем то и ждали , сам процесс создания форка

6.1 Подготовимся Заходим сюда https://github.com/lhartikk/GenesisH0 и устанавливаем генератор Genesis блока

Конструктор алгоритма скрипт на питоне.
 
sudo pip install scrypt construct



Модуль для монеток x11
 
git clone https://github.com/lhartikk/xcoin-hash



Переходим к исходнику модуля
 
cd xcoin-hash



Собираем
 
sudo python setup.py install  


Сам генератор генесис блока
 
git clone https://github.com/lhartikk/GenesisH0


Переходим к нему
 
cd GenesisH0



Проверяем работает ли

 
python genesis.py -a X11 -z "Wired 09/Jan/2014 The Grand Experiment Goes Live: Overstock.com Is Now Accepting Bitcoins" -t 1317972665 -p "040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9" -n 28917698 -t 1390095618 -v 5000000000


Если имеем такое на выходе,значит все хорошо.
fb3e41dd6c3b.png


Примечание для работы генератора нам требуются
 
apt-get install python-dev python-pip python2.7-dev libssl-dev



Нам их ставить больше не требуется , так как мы установили их в самом начале.

7 Редактирование исходников ( я буду описывать все по порядку с 1 по последний )


Первое что мы делаем переименовываем наш репозиторий на название нашем будущий монетки , я буду использовать имя owncoin.
Жмем Setting и пишем наше название, жмем rename.
6bbcada2dfaf.png
Переходим назад и смотрим что все успешно переименовалось.
a90289687f13.png
Теперь открываем наш github клиент для windows и входим в него пользователем github.
69c0747c7019.png
6011bfcd652e.png
Далее клонируем репозиторий к нам на диск.
48f292138e44.png
86f11a2773e8.png
Жмем View branch
3ced080ae70d.png
И видим такое
29c9ad3519ee.png
Переходим в нашу папку с исходниками и будем массово заменять адреса репозиториев сохраненные в файлах на наш.

Делаем как на картинке заменяем github.com/dashpay/dash на github.com/mycointest/owncoin в папке D:\owncoin во всех файлах.

8d2078e30665.png

Далее переходим в наш клиент github и видим такое, Пишем что либо в Summary и Description и жмем Comit to master
e8bcce00a636.png


И видим что все успешно загрузилось на наш репозиторий.
f2be06c594bb.png
По History как вы уже поняли мы можем отслеживать вносимые изменения.
308873424e01.png
Теперь мы переименуем DASHPAY Dashpay dashpay на MYTESTCOIN Mycointest mycointest
И DASH ,Dash, dash на OWNCOIN Owncoin owncoin

Важно при массовом переименовании поставить галочку учитывать регистр ,а также сначала жать найти все , и беглым взглядом искать найденные файлы с крякозяблами , в них не в коем случае нельзя нечего переименовывать.
Потому мы их находим при поиске и делаем бекапы. И после процесса переименования мы их возвращаем на свои места. В обязательном порядке начинайте с Dashpay вариаций.

Начнем …

Dashpay на Mycointest
Как мы видим мы наши всего 1 результат. Жмем заменить во всех файлах.
94c0d78e4349.png


dashpay на mycointest

Как мы можем заметить тут результатов побольше уже ,но нечего критично тут нету, так что смело жмем заменить во всех файлах.
fc3fba5e64c7.png

Теперь перейдем к замене DASH ,Dash, dash на OWNCOIN Owncoin owncoin

DASH на OWNCOIN

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



Dash на Owncoin

А вот тут наш поджидает сюрприз в виде файлов с крякозяблами. Мы должны пройтись по всему списку найдя все файлы и скопировать их куда то для последующего возвращения на место.

В моем случае это файлы
 

D:\owncoin\owncoin\.git\objects\pack\pack-86e81c3d9a98b214df607081954f37e571a09fd6.pack

D:\owncoin\owncoin\contrib\gitian-downloader\luke-jr-key.pgp

D:\owncoin\owncoin\contrib\macdeploy\background.psd



По этому я просто копирую эти файлы в укромное место ,и жму заменить после возвращая эти файлы на свои места.
049d1c6c3040.png

dash на owncoin

Опять как и в прошлом примере имеем 3 файла с крякозяблами
В моем случае это файлы
 
D:\owncoin\owncoin\.git\index

D:\owncoin\owncoin\.git\objects\pack\pack-86e81c3d9a98b214df607081954f37e571a09fd6.pack

D:\owncoin\owncoin\contrib\gitian-downloader\luke-jr-key.pgp


Поступаем также , копируем в укромное место , жмем заменить в файлах.
330f9502cc32.png

Теперь открываем папку с нашими исходниками в проводнике , и через поиск ищем все со словами dash (папки с названиями dashpay можно проигнорировать)
И прямо в проводники руками заменяем всё dash на owncoin
3270c8c63869.png

Важное проводник почемуто находит не все , потому идем потом в папку
 
D:\key\owncoin\src\qt\res\icons


4696dbf7c673.png

Изменяем названия в файлах в которых есть dash на owncoin ( заменяем в файлах только часть dash!)


Теперь переходим в наш клиент github , и загрузим на него изменённые файлы . Как это делать я рассказывал выше.


Теперь приступаем к настройке исходников

Первое что мы сделаем сгенерируем свои уникальные паблик и приват ключи

Для этого мы идем в консоль на наш дебиан

И генерируем их командой ( нам понадобится 5 ключей )


openssl ecparam -genkey -name secp256r1 -out k.pem



-out название файла ключа я буду их называть
 
mainalert.pem
testnetalert.pem
main.pem
mainspork.pem
testnetspork.pem

openssl ecparam -genkey -name secp256r1 -out mainalert.pem


d4c498e324be.png

Теперь получаем вывод нашего ключа командой

 

openssl ec -in k.pem -noout –text



у меня выглядит так
 
openssl ec -in mainalert.pem -noout -text


76a137f5f43c.png

копируем содержимое с командной строки, и помещаем в текстовик.

92733547c741.png
Теперь убираем все двоеточия
dbefb815afda.png

И выравниваем в 1 срочку

Проделываем так 5 раз,
f1c73d3c64a5.png

Теперь делаем так



openssl ec -in mainalert.pem -text > mainalert.hex


Проделываем так для каждого файла.
45e4298b20bf.png
Теперь делаем вывод ключа в hex, и сохраняем их в отдельный текстовый файл
Тоже для всех , этой командой
 
cat mainalert.hex


ac63144a28df.png

Вот так они выглядят в моей текстовом документе их 5.
0d4614430582.png
В результате я имею такой набор приват паблик и приват ключей , теперь лезем по FTP на наш дебиан и копируем все файлы ключей к себе на будущие.
c192e587098f.png

Теперь проверим валидность наших ключей

Идем на
 
http://kjur.github.io/jsrsasign/sample-ecdsa.html
 

Жмем sing message
6ac832c68f07.png
Далее жмем verify it, и если на выходе получаем такое то ключи валидные.
46035b88a5dc.png

Проделываем такое с каждым ключом.


Далее приступаем к генерации генезис блоков

Идем в нашу консоль на дебиан

Переходим в



cd GenesisH0


Берем наш main паблик ключ в моем случае это

 
0436b2d4b1a72bcad8a8f9b8d12048014bcbbb21df91d84ed172cbcfe8aa6f0e9da5e995fa3b8c63da129c247b73cdd55bac80abc2b67adfbf88381a9889e64177



Придумываем уникально фразу которая будет у нас pszTimestamp

В моем случае это
 
"I create my owncoin 07/12/2015 for test , End its work for me. I hope this guide help you"



Идем на
 
http://www.unixtimestamp.com/index.php
 
и timestamp на будущий старт , я сделал примерно на 5 часов от текущего времени , так как примерно столько еще я потрачу на это гайд :)
dda9d4ff23bc.png

я получил 1449579900

0541233c75a3.png

И формулируем такой запрос

 
python genesis.py -a X11 -z "I create my owncoin 07/12/2015 for test , End its work for me. I hope this guide help you" -t 1449579900 -p "0436b2d4b1a72bcad8a8f9b8d12048014bcbbb21df91d84ed172cbcfe8aa6f0e9da5e995fa3b8c63da129c247b73cdd55bac80abc2b67adfbf88381a9889e64177"


Вставляем в консоль , и ждем нахождения генезис блока.

Результат копируем в текстовик.

Это мы создали генезис блок для основной сети , а теперь мы создадим для тест нета и регтестнета генезис блоки!
946a5143c187.png

Что бы это сделать мы просто к –t прибавим в конце 1 и 2

Это у нас будет для тестнета
 
python genesis.py -a X11 -z "I create my owncoin 07/12/2015 for test , End its work for me. I hope this guide help you" -t 1449579901 -p "0436b2d4b1a72bcad8a8f9b8d12048014bcbbb21df91d84ed172cbcfe8aa6f0e9da5e995fa3b8c63da129c247b73cdd55bac80abc2b67adfbf88381a9889e64177"


Как мы можем заметить мы получили совсем другой генезис блок но с тем же pszTimestamp и паблик ключом
b79941f0089d.png

А это для рег теста , только тут мы еще добавим параметр –b 0x207fffff и -n 2
 
python genesis.py -a X11 -z "I create my owncoin 07/12/2015 for test , End its work for me. I hope this guide help you" -t 1449579901 -p "0436b2d4b1a72bcad8a8f9b8d12048014bcbbb21df91d84ed172cbcfe8aa6f0e9da5e995fa3b8c63da129c247b73cdd55bac80abc2b67adfbf88381a9889e64177" -b 0x207fffff –n 2


6300bb59327b.png


Объясню зачем мы делаем это для тестовых параметров , так как мы заменили pszTimestamp и merkle hash на свой уникальный , если мы не заменим в тест и рег тест генезис блоки то после компиляции клиента мы получим error. Иза связи их генезис блоков с pszTimestamp и merkle hash.

В результате я получил такое в своем текстовике.

4fb743602de4.png
Ну а теперь когда у нас все есть , мы можем приступить к редактированию исходников :)


Начнем с файла
chainparams.cpp

Первое что мы делаем , редактируем чек поинты


static Checkpoints::MapCheckpoints mapCheckpoints =
        boost::assign::map_list_of
        (  1500, uint256("0x000000aaf0300f59f49bc3e970bad15c11f961fe2347accffff19d96ec9778e3"))
        (  4991, uint256("0x000000003b01809551952460744d5dbb8fcbd6cbae3c220267bf7fa43f837367"))
        (  9918, uint256("0x00000000213e229f332c0ffbe34defdaa9e74de87f2d8d1f01af8d121c3c170b"))
        ( 16912, uint256("0x00000000075c0d10371d55a60634da70f197548dbbfa4123e12abfcbc5738af9"))
        ( 23912, uint256("0x0000000000335eac6703f3b1732ec8b2f89c3ba3a7889e5767b090556bb9a276"))
        ( 35457, uint256("0x0000000000b0ae211be59b048df14820475ad0dd53b9ff83b010f71a77342d9f"))
        ( 45479, uint256("0x000000000063d411655d590590e16960f15ceea4257122ac430c6fbe39fbf02d"))
        ( 55895, uint256("0x0000000000ae4c53a43639a4ca027282f69da9c67ba951768a20415b6439a2d7"))
        ( 68899, uint256("0x0000000000194ab4d3d9eeb1f2f792f21bb39ff767cb547fe977640f969d77b7"))
        ( 74619, uint256("0x000000000011d28f38f05d01650a502cc3f4d0e793fbc26e2a2ca71f07dc3842"))
        ( 75095, uint256("0x0000000000193d12f6ad352a9996ee58ef8bdc4946818a5fec5ce99c11b87f0d"))
        ( 88805, uint256("0x00000000001392f1652e9bf45cd8bc79dc60fe935277cd11538565b4a94fa85f"))
        ( 107996, uint256("0x00000000000a23840ac16115407488267aa3da2b9bc843e301185b7d17e4dc40"))
        ( 137993, uint256("0x00000000000cf69ce152b1bffdeddc59188d7a80879210d6e5c9503011929c3c"))
        ( 167996, uint256("0x000000000009486020a80f7f2cc065342b0c2fb59af5e090cd813dba68ab0fed"))
        ( 207992, uint256("0x00000000000d85c22be098f74576ef00b7aa00c05777e966aff68a270f1e01a5"))
        ( 312645, uint256("0x0000000000059dcb71ad35a9e40526c44e7aae6c99169a9e7017b7d84b1c2daf"))
        ;
static const Checkpoints::CCheckpointData data = {
        &mapCheckpoints,
        1423563332, // * UNIX timestamp of last checkpoint block
        853742,     // * total number of transactions between genesis and last checkpoint
                    //   (the tx=... number in the SetBestChain debug.log lines)
        2800        // * estimated number of transactions per day after checkpoint
    };

static Checkpoints::MapCheckpoints mapCheckpointsTestnet =
        boost::assign::map_list_of
        ( 261, uint256("00000c26026d0815a7e2ce4fa270775f61403c040647ff2c3091f99e894a4618"))
        ( 77900, uint256("00000007e5ec67e2a626c07b7d66673c3dd8df0aed5018ca984b99fba2b71024"))
        ( 82313, uint256("000000156a313af1d69fe855609175b276996235e8f4f7da41b10e4a7a750a19"))
        ;
static const Checkpoints::CCheckpointData dataTestnet = {
        &mapCheckpointsTestnet,
        1405699509,
        201,
        500
    };

static Checkpoints::MapCheckpoints mapCheckpointsRegtest =
        boost::assign::map_list_of
        ( 0, uint256("0x000008ca1832a4baf228eb1553c03d3a2c8e02399550dd6ea8d65cec3ef23d2e"))
        ;
static const Checkpoints::CCheckpointData dataRegtest = {
        &mapCheckpointsRegtest,
        0,
        0,
        0
    };
b6ec7d7ee573.png

убираем лишние и ставим нулевые блоки , и взамен них наши генесис блоки

в моем случае это




Main
00000205a2b36c89d27547db95cdf4a3038662dd26cf21af8b9c8978a64b06a2

Testnet
00000416024caa7a7900f9a73c120660773ca4019d0671ee5d5bb528acbaa633

Regtest
17a08f326f61be14e0502edeb93d46013596a0bf1d8ddd9d5909f37dab7305a4



Ну и тайм штамп и количество транзакций между генезис блоком и последним у нас будет ноль . Последний пункт не трогаем.

Как у меня теперь это выглядит

 
static Checkpoints::MapCheckpoints mapCheckpoints =
        boost::assign::map_list_of
        (  0, uint256("0x00000205a2b36c89d27547db95cdf4a3038662dd26cf21af8b9c8978a64b06a2"))
        ;
static const Checkpoints::CCheckpointData data = {
        &mapCheckpoints,
        1449579900, // * UNIX timestamp of last checkpoint block
        0,     // * total number of transactions between genesis and last checkpoint
                    //   (the tx=... number in the SetBestChain debug.log lines)
        2800        // * estimated number of transactions per day after checkpoint
    };

static Checkpoints::MapCheckpoints mapCheckpointsTestnet =
        boost::assign::map_list_of
        ( 0, uint256("00000416024caa7a7900f9a73c120660773ca4019d0671ee5d5bb528acbaa633"))
        ;
static const Checkpoints::CCheckpointData dataTestnet = {
        &mapCheckpointsTestnet,
        1449579901,
        0,
        500
    };

static Checkpoints::MapCheckpoints mapCheckpointsRegtest =
        boost::assign::map_list_of
        ( 0, uint256("0x17a08f326f61be14e0502edeb93d46013596a0bf1d8ddd9d5909f37dab7305a4"))
        ;
static const Checkpoints::CCheckpointData dataRegtest = {
        &mapCheckpointsRegtest,
        0,
        0,
        0
    };
e0360cf1bede.png
Дальше заменяем генезис блоки и AlertPubKey

main
Тут мы вписуем совершенно рандомные валидные hex символы я возьму 0x1c 0xbd 0xcb 0x4f



        pchMessageStart[0] = 0xbf;
        pchMessageStart[1] = 0x0c;
        pchMessageStart[2] = 0x6b;
        pchMessageStart[3] = 0xbd;


Сюда мы вписываем папблик ключ что генерировали ранее – тот  что maimalert
04f4ef416b8597cbadde2216eb0d4fc5137075a3fa3442b71b4ea97efca14e885aa75911b7ef3e6353281d2515a375e8a510455214031df1ac46e443e1ea9a9647

 
        vAlertPubKey = ParseHex("048240a8748a80a286b270ba126705ced4f2ce5a7847b3610ea3c06513150dade2a8512ed5ea86320824683fc0818f0ac019214973e677acd1244f6d0571fc5103");

        
    Это наш порт для связа сети , мы его будет изменять на свой я буду использовать для замены 9887
    nDefaultPort = 9999;
       
       это мы не трогаем
 bnProofOfWorkLimit = ~uint256(0) >> 20;  // Owncoin starting difficulty is 1 / 2^12
    Это момент когда уменьшится награда в 2 раза  за майнинг.
        nSubsidyHalvingInterval = 210000;

     начало роста сложности
        nEnforceBlockUpgradeMajority = 750;
        nRejectBlockOutdatedMajority = 950;
        nToCheckBlockUpgradeMajority = 1000;
    
    Майниг клиента сколько ядер процессора будет задействовано , 0= по все.
        nMinerThreads = 0;

    Пересчет сложости раз в сутки.
        nTargetTimespan = 24 * 60 * 60; // Owncoin: 1 day

    Время на генерацию блока
        nTargetSpacing = 2.5 * 60; // Owncoin: 2.5 minutes

        /**
         * Build the genesis block. Note that the output of the genesis coinbase cannot
         * be spent as it did not originally exist in the database.
         *
         * CBlock(hash=00000ffd590b14, ver=1, hashPrevBlock=00000000000000, hashMerkleRoot=e0028e, nTime=1390095618, nBits=1e0ffff0, nNonce=28917698, vtx=1)
         *   CTransaction(hash=e0028e, ver=1, vin.size=1, vout.size=1, nLockTime=0)
         *     CTxIn(COutPoint(000000, -1), coinbase 04ffff001d01044c5957697265642030392f4a616e2f3230313420546865204772616e64204578706572696d656e7420476f6573204c6976653a204f76657273746f636b2e636f6d204973204e6f7720416363657074696e6720426974636f696e73)
         *     CTxOut(nValue=50.00000000, scriptPubKey=0xA9037BAC7050C479B121CF)
         *   vMerkleTree: e0028e
         */
 

 

pszTimestamp как мы помним мы  его создавали в самом начале
"I create my owncoin 07/12/2015 for test , End its work for me. I hope this guide help you"



        const char* pszTimestamp = "Wired 09/Jan/2014 The Grand Experiment Goes Live: Overstock.com Is Now Accepting Bitcoins";
        CMutableTransaction txNew;
        txNew.vin.resize(1);
        txNew.vout.resize(1);
    Это мы не трогаем
        txNew.vin[0].scriptSig = CScript() << 486604799 << CScriptNum(4) << vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp));

    Награда за блок ( поправьте если ошибаюсь)
        txNew.vout[0].nValue = 50 * COIN;

    Паблик ключи генезис блока у нас это
    0436b2d4b1a72bcad8a8f9b8d12048014bcbbb21df91d84ed172cbcfe8aa6f0e9da5e995fa3b8c63da129c247b73cdd55bac80abc2b67adfbf88381a9889e64177

        txNew.vout[0].scriptPubKey = CScript() << ParseHex("040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9") << OP_CHECKSIG;
        genesis.vtx.push_back(txNew);
        genesis.hashPrevBlock = 0;
        genesis.hashMerkleRoot = genesis.BuildMerkleTree();
        genesis.nVersion = 1;

    Временна метка по unix системе у нас это 1449579900

        genesis.nTime    = 1390095618;

    Nbits  у нас это 0x1e0ffff0
        genesis.nBits    = 0x1e0ffff0;

    nonce  у нас он 2087222
        genesis.nNonce   = 28917698;

    Это сам генезис блок
        hashGenesisBlock = genesis.GetHash();
        assert(hashGenesisBlock == uint256("0x00000ffd590b1485b3caadc19b22e6379c733355108f107a430458cdf3407ab6"));
    Его Merkleroot хеш
        assert(genesis.hashMerkleRoot == uint256("0xe0028eb9648db56b1ac77cf090b99048a8007e2bb64b68f092c03c7f56a662c7"));

    ДНС сиды, их мы будем  убирать путем замены на vSeeds.clear();

        vSeeds.push_back(CDNSSeedData("darkcoin.io", "dnsseed.darkcoin.io"));
        vSeeds.push_back(CDNSSeedData("darkcoin.qa", "dnsseed.darkcoin.qa"));
        vSeeds.push_back(CDNSSeedData("masternode.io", "dnsseed.masternode.io"));
        vSeeds.push_back(CDNSSeedData("mycointest.io", "dnsseed.mycointest.io"));



    Это отвечает за адрес я его не  менял .
        base58Prefixes[PUBKEY_ADDRESS] = list_of( 76);                    // Owncoin addresses start with 'X'
        base58Prefixes[SCRIPT_ADDRESS] = list_of( 16);                    // Owncoin script addresses start with '7'
        base58Prefixes[SECRET_KEY] =     list_of(204);                    // Owncoin private keys start with '7' or 'X'
        base58Prefixes[EXT_PUBLIC_KEY] = list_of(0x02)(0xFE)(0x52)(0xF8); // Owncoin BIP32 pubkeys start with 'drkv'
        base58Prefixes[EXT_SECRET_KEY] = list_of(0x02)(0xFE)(0x52)(0xCC); // Owncoin BIP32 prvkeys start with 'drkp'
        base58Prefixes[EXT_COIN_TYPE]  = list_of(0x80000005);             // Owncoin BIP44 coin type is '5'

        convertSeed6(vFixedSeeds, pnSeed6_main, ARRAYLEN(pnSeed6_main));

        fRequireRPCPassword = true;
        fMiningRequiresPeers = true;
        fAllowMinDifficultyBlocks = false;
        fDefaultConsistencyChecks = false;
        fRequireStandard = true;
        fMineBlocksOnDemand = false;
        fSkipProofOfWorkCheck = false;
        fTestnetToBeDeprecatedFieldRPC = false;

        nPoolMaxTransactions = 3;

    Достаточно спорная часть , я думаю вполне возможно просто вставить ключ и после импортировать себе приват кей в кошелек для работы спорка , но могу ошибаться поправьте кто знает .
    Принципе и без этого все работает.
    Ставим сюда mainspork
    04594d9bcfd432ed21603c81dc6a2cbdc58ded77217ecd91c0420737f60a1948871a66bb84bff26e0f5dd447ee931b5213bca0d9de686c49f6f03545a03fd79b75

        strSporkKey = "04549ac134f694c0243f503e8c8a9a986f5de6610049c40b07816809b0d1d06a21b07be27b9bb555931773f62ba6cf35a25fd52f694d4e1106ccd237a7bb899fdd";
        strMasternodePaymentsPubKey = "04549ac134f694c0243f503e8c8a9a986f5de6610049c40b07816809b0d1d06a21b07be27b9bb555931773f62ba6cf35a25fd52f694d4e1106ccd237a7bb899fdd";
        strDarksendPoolDummyAddress = "Xq19GqFvajRrEdDHYRKGYjTsQfpV5jyipF";

    Ставим что ставили в генезис блок или делаем отдельный на будущею дату.
        nStartMasternodePayments = 1403728576; //Wed, 25 Jun 2014 20:36:16 GMT
f70a0521eed3.png
5038a20d55bb.png
как это выглядит после редактирования.




class CMainParams : public CChainParams {
public:
    CMainParams() {
        networkID = CBaseChainParams::MAIN;
        strNetworkID = "main";
        /**
         * The message start string is designed to be unlikely to occur in normal data.
         * The characters are rarely used upper ASCII, not valid as UTF-8, and produce
         * a large 4-byte int at any alignment.
         */
        pchMessageStart[0] = 0x1c;
        pchMessageStart[1] = 0xbd;
        pchMessageStart[2] = 0xcb;
        pchMessageStart[3] = 0x4f;
        vAlertPubKey = ParseHex("04f4ef416b8597cbadde2216eb0d4fc5137075a3fa3442b71b4ea97efca14e885aa75911b7ef3e6353281d2515a375e8a510455214031df1ac46e443e1ea9a9647");
        nDefaultPort = 9887;
        bnProofOfWorkLimit = ~uint256(0) >> 20;  // Owncoin starting difficulty is 1 / 2^12
        nSubsidyHalvingInterval = 210000;
        nEnforceBlockUpgradeMajority = 750;
        nRejectBlockOutdatedMajority = 950;
        nToCheckBlockUpgradeMajority = 1000;
        nMinerThreads = 0;
        nTargetTimespan = 24 * 60 * 60; // Owncoin: 1 day
        nTargetSpacing = 2.5 * 60; // Owncoin: 2.5 minutes

        /**
         * Build the genesis block. Note that the output of the genesis coinbase cannot
         * be spent as it did not originally exist in the database.
         *
         * CBlock(hash=00000ffd590b14, ver=1, hashPrevBlock=00000000000000, hashMerkleRoot=e0028e, nTime=1390095618, nBits=1e0ffff0, nNonce=28917698, vtx=1)
         *   CTransaction(hash=e0028e, ver=1, vin.size=1, vout.size=1, nLockTime=0)
         *     CTxIn(COutPoint(000000, -1), coinbase 04ffff001d01044c5957697265642030392f4a616e2f3230313420546865204772616e64204578706572696d656e7420476f6573204c6976653a204f76657273746f636b2e636f6d204973204e6f7720416363657074696e6720426974636f696e73)
         *     CTxOut(nValue=50.00000000, scriptPubKey=0xA9037BAC7050C479B121CF)
         *   vMerkleTree: e0028e
         */
        const char* pszTimestamp = "I create my owncoin 07/12/2015 for test , End its work for me. I hope this guide help you";
        CMutableTransaction txNew;
        txNew.vin.resize(1);
        txNew.vout.resize(1);
        txNew.vin[0].scriptSig = CScript() << 486604799 << CScriptNum(4) << vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp));
        txNew.vout[0].nValue = 50 * COIN;
        txNew.vout[0].scriptPubKey = CScript() << ParseHex("0436b2d4b1a72bcad8a8f9b8d12048014bcbbb21df91d84ed172cbcfe8aa6f0e9da5e995fa3b8c63da129c247b73cdd55bac80abc2b67adfbf88381a9889e64177") << OP_CHECKSIG;
        genesis.vtx.push_back(txNew);
        genesis.hashPrevBlock = 0;
        genesis.hashMerkleRoot = genesis.BuildMerkleTree();
        genesis.nVersion = 1;
        genesis.nTime    = 1449579900;
        genesis.nBits    = 0x1e0ffff0;
        genesis.nNonce   = 2087222;

        hashGenesisBlock = genesis.GetHash();
        assert(hashGenesisBlock == uint256("0x00000205a2b36c89d27547db95cdf4a3038662dd26cf21af8b9c8978a64b06a2"));
        assert(genesis.hashMerkleRoot == uint256("0xb7ba7a0616705a327d39f6bf791c7db48abe4c79a11b62c6d690816eddc4d730"));

        vSeeds.clear();

        base58Prefixes[PUBKEY_ADDRESS] = list_of( 76);                    // Owncoin addresses start with 'X'
        base58Prefixes[SCRIPT_ADDRESS] = list_of( 16);                    // Owncoin script addresses start with '7'
        base58Prefixes[SECRET_KEY] =     list_of(204);                    // Owncoin private keys start with '7' or 'X'
        base58Prefixes[EXT_PUBLIC_KEY] = list_of(0x02)(0xFE)(0x52)(0xF8); // Owncoin BIP32 pubkeys start with 'drkv'
        base58Prefixes[EXT_SECRET_KEY] = list_of(0x02)(0xFE)(0x52)(0xCC); // Owncoin BIP32 prvkeys start with 'drkp'
        base58Prefixes[EXT_COIN_TYPE]  = list_of(0x80000005);             // Owncoin BIP44 coin type is '5'

        convertSeed6(vFixedSeeds, pnSeed6_main, ARRAYLEN(pnSeed6_main));

        fRequireRPCPassword = true;
        fMiningRequiresPeers = true;
        fAllowMinDifficultyBlocks = false;
        fDefaultConsistencyChecks = false;
        fRequireStandard = true;
        fMineBlocksOnDemand = false;
        fSkipProofOfWorkCheck = false;
        fTestnetToBeDeprecatedFieldRPC = false;

        nPoolMaxTransactions = 3;
        strSporkKey = "04594d9bcfd432ed21603c81dc6a2cbdc58ded77217ecd91c0420737f60a1948871a66bb84bff26e0f5dd447ee931b5213bca0d9de686c49f6f03545a03fd79b75";
        strMasternodePaymentsPubKey = "04594d9bcfd432ed21603c81dc6a2cbdc58ded77217ecd91c0420737f60a1948871a66bb84bff26e0f5dd447ee931b5213bca0d9de686c49f6f03545a03fd79b75";
        strDarksendPoolDummyAddress = "Xq19GqFvajRrEdDHYRKGYjTsQfpV5jyipF";
        nStartMasternodePayments = 1449579900; //Wed, 25 Jun 2014 20:36:16 GMT
21d101971a12.png
c4ad12ca245f.png
Проделываем тоже самое что testnet заполняя только те поля что доступны , чистим сиды. В регтест обязательно



bits: 0x207fffff



Также не забываем заменить везде порты я заменял в 4 позициях
 
main
9999 на 9887
testnet
19999 на 19887
regtest
19994 на 19883
Unite=test
18445 на 18334


И сохраняем наш исходник , и приступаем к редактированию следующего.

activemasternode.cpp

Тут мы изменям порты 9999 на 9887

вот в этих местах

 

        LogPrintf("CActiveMasternode::ManageStatus() - Checking inbound connection to '%s'\n", service.ToString());

        if(Params().NetworkID() == CBaseChainParams::MAIN) {
            if(service.GetPort() != 9999) {
                notCapableReason = strprintf("Invalid port: %u - only 9999 is supported on mainnet.", service.GetPort());
                LogPrintf("CActiveMasternode::ManageStatus() - not capable: %s\n", notCapableReason);
                return;
            }
        } else if(service.GetPort() == 9999) {
            notCapableReason = strprintf("Invalid port: %u - 9999 is only supported on mainnet.", service.GetPort());
            LogPrintf("CActiveMasternode::ManageStatus() - not capable: %s\n", notCapableReason);
            return;
        }

        if(!ConnectNode((CAddress)service, NULL, true)){
            notCapableReason = "Could not connect to " + service.ToString();
            LogPrintf("CActiveMasternode::ManageStatus() - not capable: %s\n", notCapableReason);
            return;
        }
503240e03269.png


и



    CService service = CService(strService);
    if(Params().NetworkID() == CBaseChainParams::MAIN) {
        if(service.GetPort() != 9999) {
            errorMessage = strprintf("Invalid port %u for masternode %s - only 9999 is supported on mainnet.", service.GetPort(), strService);
            LogPrintf("CActiveMasternode::Register() - %s\n", errorMessage);
            return false;
        }
    } else if(service.GetPort() == 9999) {
        errorMessage = strprintf("Invalid port %u for masternode %s - 9999 is only supported on mainnet.", service.GetPort(), strService);
        LogPrintf("CActiveMasternode::Register() - %s\n", errorMessage);
        return false;
    }
855b1133c0ad.png



Тут заменяем порты
chainparamsbase.cpp



* Main network
 */
class CBaseMainParams : public CBaseChainParams
{
public:
    CBaseMainParams()
    {
        networkID = CBaseChainParams::MAIN;
        nRPCPort = 9998;
    }
};
static CBaseMainParams mainParams;

/**
 * Testnet (v3)
 */
class CBaseTestNetParams : public CBaseMainParams
{
public:
    CBaseTestNetParams()
    {
        networkID = CBaseChainParams::TESTNET;
        nRPCPort = 19998;
        strDataDir = "testnet3";
    }
};
d0db83a3ab11.png

Я заменил 9998 на 9886 ,19998 на 19886



Тут мы прописываем вшитые fixed seeds
chainparamsseeds.h


// ***TODO*** fix generate-seeds.py and REGENERATE
static SeedSpec6 pnSeed6_main[] = {
    {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb3,0x2b,0x80,0xef}, 9999},
    {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x80,0x7f,0x6a,0xeb}, 9999},
    {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x25,0x9d,0xfa,0x0a}, 9999},
    {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa2,0xd1,0x63,0x23}, 9999},
    {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6c,0x3d,0xd2,0x36}, 9999},
    {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xac,0xf5,0x05,0x84}, 9999},
    {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0xa2,0x42,0x0a}, 9999},
    {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4e,0x6d,0xb2,0xc3}, 9999},
    {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8a,0x80,0xa9,0x5e}, 9999},
    {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x34,0x0b,0x8d,0xe5}, 9999},
    {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x25,0x3b,0x15,0x3a}, 9999},
    {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0x69,0x76,0x0f}, 9999},
    {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb2,0x21,0x7e,0xdd}, 9999},
    {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x68,0xec,0x17,0x83}, 9999},
    {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6c,0x3d,0xd1,0x25}, 9999}
};

static SeedSpec6 pnSeed6_test[] = {
//    {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x99,0xcb,0x26,0x31,0xba,0x48,0x51,0x31,0x39,0x0d}, 18333},
//    {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x44,0xf4,0xf4,0xf0,0xbf,0xf7,0x7e,0x6d,0xc4,0xe8}, 18333}
};
#endif // BITCOIN_CHAINPARAMSSEEDS_H


Получить их легко, идем на http://www.miniwebtool.com/ip-address-to-hex-converter/

пишем там свой ip адресс как пример использовал 127.0.0.1 и получил 0x7F000001
4f485502cf6b.png

Теперь превратим его в нужный формат , берем просто убираем 0x c 0x7F000001
И делаем так 7F 00 00 01

Теперь заменяем после 0xff 0xff, не забываем про порт.
Результат
 
{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x7f,0x00,0x00,0x01}, 9887},


Как у меня все выглядит после редактирования.

998f2c565eeb.png

Тут мы изменяем версию клиента , я сделаю 1.0.0.1
clientversion.h
 
//! These need to be macros, as clientversion.cpp's and owncoin*-res.rc's voodoo requires it
#define CLIENT_VERSION_MAJOR 0
#define CLIENT_VERSION_MINOR 12
#define CLIENT_VERSION_REVISION 0
#define CLIENT_VERSION_BUILD 55
5d579ad5600e.png

Результат


//! These need to be macros, as clientversion.cpp's and owncoin*-res.rc's voodoo requires it
#define CLIENT_VERSION_MAJOR 1
#define CLIENT_VERSION_MINOR 0
#define CLIENT_VERSION_REVISION 0
#define CLIENT_VERSION_BUILD 1
a874c3c386ea.png


Тут заменяем порты
chainparamsbase.cpp
 
* Main network
*/
class CBaseMainParams : public CBaseChainParams
{
public:
CBaseMainParams()
{
networkID = CBaseChainParams::MAIN;
nRPCPort = 9998;
}
};
static CBaseMainParams mainParams;

/**
* Testnet (v3)
*/
class CBaseTestNetParams : public CBaseMainParams
{
public:
CBaseTestNetParams()
{
networkID = CBaseChainParams::TESTNET;
nRPCPort = 19998;
strDataDir = "testnet3";
}
};
 

Я заменил 9998 на 9886 ,19998 на 19886



Управление сложностью майнига и наградами мастер нодам.
main.cpp
ac230271adab.png
5b3424b50643.png
Я здесь оставил все как есть ,вы же можете попробовать поэкспериментировать , и можете дополнить мою статью в теме разъяснениями под данным пунктам.

Тут мы заменяем порты с 9999 на 9887
masternode.cpp


    if(Params().NetworkID() == CBaseChainParams::MAIN) {
        if(addr.GetPort() != 9999) return false;
    } else if(addr.GetPort() == 9999) return false;
3e5bd9d8d1eb.png


И снова порты 9999 на 9887
masternodeconfig.cpp


        if(Params().NetworkID() == CBaseChainParams::MAIN) {
            if(CService(ip).GetPort() != 9999) {
                strErr = _("Invalid port detected in masternode.conf") + "\n" +
                        strprintf(_("Line: %d"), linenumber) + "\n\"" + line + "\"" + "\n" +
                        _("(must be 9999 for mainnet)");
                streamConfig.close();
                return false;
            }
        } else if(CService(ip).GetPort() == 9999) {
            strErr = _("Invalid port detected in masternode.conf") + "\n" +
                    strprintf(_("Line: %d"), linenumber) + "\n\"" + line + "\"" + "\n" +
                    _("(9999 could be used only on mainnet)");
            streamConfig.close();
            return false;
        }
d80cf941e886.png


Заменяем порты с 9999 на 9887
masternodeman.cpp


        if(Params().NetworkID() == CBaseChainParams::MAIN){
            if(addr.GetPort() != 9999) return;
        } else if(addr.GetPort() == 9999) return;
f711fa223d49.png

Сохраняем все исходники и идем по этим путям отрываем эти документы и редактируем порты

D:\owncoin\owncoin\contrib\linearize\linearize-hashes.py

    if 'host' not in settings:
        settings['host'] = '127.0.0.1'
    if 'port' not in settings:
        settings['port'] = 9998
    if 'min_height' not in settings:
        settings['min_height'] = 0
    if 'max_height' not in settings:
        settings['max_height'] = 313000
    if 'rpcuser' not in settings or 'rpcpassword' not in settings:
        print("Missing username and/or password in cfg file", file=stderr)
        sys.exit(1)
D:\owncoin\owncoin\contrib\spendfrom\spendfrom.py
    testnet = config.get('testnet', '0')
    testnet = (int(testnet) > 0)  # 0/1 in config file, convert to True/False
    if not 'rpcport' in config:
        config['rpcport'] = 19998 if testnet else 9998
D:\owncoin\owncoin\contrib\bitrpc\bitrpc.py
if rpcpass == "":
    access = ServiceProxy("http://127.0.0.1:9998")
else:
    access = ServiceProxy("http://"+rpcuser+":"+rpcpass+"@127.0.0.1:9998")
cmd = sys.argv[1].lower()


заменяем 9998 на 9886 и 19998 на 19886


Теперь идем в
D:\owncoin\owncoin\contrib\qos\tc.sh
#    this filter sends the packages into the 1:11 class, and this class is limited to ${LIMIT}
iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 9999 ! -d ${LOCALNET} -j MARK --set-mark 0x2
iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 9999 ! -d ${LOCALNET} -j MARK --set-mark 0x2


и заменяем тут порты 9999 на 9887


Теперь сюда
D:\owncoin\owncoin\src\test\netbase_tests.cpp
и тут заменяем
 
    BOOST_CHECK(TestSplitHost("www.bitcoin.org", "www.bitcoin.org", -1));
    BOOST_CHECK(TestSplitHost("[www.bitcoin.org]", "www.bitcoin.org", -1));
    BOOST_CHECK(TestSplitHost("www.bitcoin.org:80", "www.bitcoin.org", 80));
    BOOST_CHECK(TestSplitHost("[www.bitcoin.org]:80", "www.bitcoin.org", 80));
    BOOST_CHECK(TestSplitHost("127.0.0.1", "127.0.0.1", -1));
    BOOST_CHECK(TestSplitHost("127.0.0.1:9999", "127.0.0.1", 9999));
    BOOST_CHECK(TestSplitHost("[127.0.0.1]", "127.0.0.1", -1));
    BOOST_CHECK(TestSplitHost("[127.0.0.1]:9999", "127.0.0.1", 9999));
    BOOST_CHECK(TestSplitHost("::ffff:127.0.0.1", "::ffff:127.0.0.1", -1));
    BOOST_CHECK(TestSplitHost("[::ffff:127.0.0.1]:9999", "::ffff:127.0.0.1", 9999));
    BOOST_CHECK(TestSplitHost("[::]:9999", "::", 9999));
    BOOST_CHECK(TestSplitHost("::9999", "::9999", -1));
    BOOST_CHECK(TestSplitHost(":9999", "", 9999));
    BOOST_CHECK(TestSplitHost("[]:9999", "", 9999));
    BOOST_CHECK(TestSplitHost("", "", -1));

И заменяем 9999 на 9887 потом в поиске ищем еще 9999 , нас бросает в низ документа, и делаем тоже самое.
 
    BOOST_CHECK(TestParse("127.0.0.1", "127.0.0.1:65535"));
    BOOST_CHECK(TestParse("127.0.0.1:9999", "127.0.0.1:9999"));
    BOOST_CHECK(TestParse("::ffff:127.0.0.1", "127.0.0.1:65535"));
    BOOST_CHECK(TestParse("::", "[::]:65535"));
    BOOST_CHECK(TestParse("[::]:9999", "[::]:9999"));
    BOOST_CHECK(TestParse("[127.0.0.1]", "127.0.0.1:65535"));
    BOOST_CHECK(TestParse(":::", ""));



Теперь сюда
D:\owncoin\owncoin\contrib\seeds\makeseeds.py

И изменяем это
 
SUSPICIOUS_HOSTS = set([
    "130.211.129.106", "178.63.107.226",
    "83.81.130.26", "88.198.17.7", "148.251.238.178", "176.9.46.6",
    "54.173.72.127", "54.174.10.182", "54.183.64.54", "54.194.231.211",
    "54.66.214.167", "54.66.220.137", "54.67.33.14", "54.77.251.214",
    "54.94.195.96", "54.94.200.247"
])

import re
import sys
import dns.resolver

PATTERN_IPV4 = re.compile(r"^((\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})):9999$")
PATTERN_AGENT = re.compile(r"^(\/Satoshi:0.8.6\/|\/Satoshi:0.9.(2|3)\/|\/Core:0.1(0|1|2).\d{1,2}.\d{1,2}\/)$")

На такое
 
SUSPICIOUS_HOSTS = set([
    "127.0.0.1"  - наш ип  основной ноды
])

import re
import sys
import dns.resolver

PATTERN_IPV4 = re.compile(r"^((\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})):9887$") тут изменяем порт

PATTERN_AGENT = re.compile(r"^(\/Satoshi:0.8.6\/|\/Satoshi:0.9.(2|3)\/|\/Core:0.1(0|1|2).\d{1,2}.\d{1,2}\/)$")


Теперь идем в
 
D:\owncoin\owncoin\share\seeds


В обоих текстовых документах трем все ипы и пишем свой.
 

Открываем
generate-seeds.py

И заменяем тут порты

    with open(os.path.join(indir,'nodes_main.txt'),'r') as f:
        process_nodes(g, f, 'pnSeed6_main', 9999)
    g.write('\n')
    with open(os.path.join(indir,'nodes_test.txt'),'r') as f:
        process_nodes(g, f, 'pnSeed6_test', 19999)
    g.write('#endif // BITCOIN_CHAINPARAMSSEEDS_H\n')
Результат
    with open(os.path.join(indir,'nodes_main.txt'),'r') as f:
        process_nodes(g, f, 'pnSeed6_main', 9887)
    g.write('\n')
    with open(os.path.join(indir,'nodes_test.txt'),'r') as f:
        process_nodes(g, f, 'pnSeed6_test', 19887)
    g.write('#endif // BITCOIN_CHAINPARAMSSEEDS_H\n')




Теперь идем сюда
 
D:\owncoin\owncoin\configure.ac


И ставим версию которою мы указали в исходном файле ,напомню я указывал 1.0.0.1
 
define(_CLIENT_VERSION_MAJOR, 0)
define(_CLIENT_VERSION_MINOR, 12)
define(_CLIENT_VERSION_REVISION, 0)
define(_CLIENT_VERSION_BUILD, 55)
Стало так
define(_CLIENT_VERSION_MAJOR, 1)
define(_CLIENT_VERSION_MINOR, 0)
define(_CLIENT_VERSION_REVISION, 0)
define(_CLIENT_VERSION_BUILD, 1)

Теперь переходим в
 
D:\owncoin\owncoin\contrib\gitian-descriptors

И в каждом файле изменяем
name: "owncoin-win-0.12"
enable_cache: true
Получилось так
name: "owncoin-win-1.0.0.1"
enable_cache: true
Не забываем все сохранить.


Теперь переходим в на клиент github и загружаем все изменения на репозиторий.

Идем на сайт
 
https://github.com/mycointest/owncoin

9251b4c62a17.png
Жмем на releases

Далее жмем Draft a new release
514962bf1fb7.png
В таге пишем номер версии в моем случае это 1.0.0.1
ce4177a9409f.png

Жмем Publish release


Теперь переходим в нашу консоль на дибиан

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

И пишем туда



git clone https://github.com/mycointest/owncoin



Ждем пока скачаются исходники.

Переходим в
 
cd gitian-builder



Потом
 
cd ~debian/owncoin



Пишем

 
git pull




Переходим
 
cd ~debian/gitian-builder 




Снова качаем зависимости
 
make -C ../owncoin/depends download SOURCES_PATH=`pwd`/cache/common




Собираем
 
./bin/gbuild --commit owncoin=v1.0.0.1 ../owncoin/contrib/gitian-descriptors/gitian-win.yml



Открываем параллельно 2 сесии SSH

Переходим в них в

 
cd gitian-builder



и смотри сборку с помощью

 
tail -f var/install.log

tail -f var/build.log


Что бы открыть логи , надо сначала дождаться их создания!

Дожидаемся компиляции , берем клиент с ftp

Делаем 2 папку под дату , запускам 1 клиент

и

2 клиент с
 
-datadir=owncoin2 –listen=0 –gen=1

В конф файл не забываем прописать

 
addnode=127.0.0.1



Запускаем сначала тот что c –listen=1 а после уже тот что с 0, и наблюдаем генерацию монеток :)

65e80c9c349f.png
Ссылка на комментарий
Поделиться на другие сайты

Тема раскрыта отлично, есть смысл перенести в блог перед- Dash "Эволюция" , народу познавательней будет почитать, нежели утопический маразм "Будущее экономики майнинга криптовалют с точки зрения физики".

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

А зачем нужен форк на основе DASH если уже есть DASH и другие форки на алгоритме X11?

Ссылка на комментарий
Поделиться на другие сайты

Красота. Возникла проблема. Сам с ней справился и выложил решение в открытый доступ. Пример "идеального" форумного пользователя :) Респект.

Ссылка на комментарий
Поделиться на другие сайты

Конечно ж респект..но чуть палец не отвалился пока колесо мыши крутил вниз... :)

Ссылка на комментарий
Поделиться на другие сайты

Это лучший русскоязычный мануал по теме. Однозначно респект. Всё помню те времена, когда просто по крупицам приходилось выискивать информацию и пробовать всё методом проб и ошибок, чтобы форкнуть лайт (делал это ради спортивного интереса и любопытства). Однозначно лучший русскоязычный материал по теме, разжевано всё лучше некуда. Я бы закрепил эту тему, а dash сообществом выписал бы даже вознаграждение этому парню.

Ссылка на комментарий
Поделиться на другие сайты

 

 

Я бы закрепил эту тему, а dash сообществом выписал бы даже вознаграждение этому парню.

 

Вот мы с @qwer так и не поняли - какая от форканья польза сообществу DASH?

Ссылка на комментарий
Поделиться на другие сайты

єєєє я соль не понял, зачем єто все?

 

Вот мы с @qwer так и не поняли - какая от форканья польза сообществу DASH?

Ну тут разве что польза сообществу Dash ,только  в переводе  на ру компиляции  их кошелька под windows  :)

 

а так  это больше  как пример  создания  своего форка , и как искать  самостоятельно  параметры которые необходимо редактировать для людей далеких от этой темы.

 

Как бонус вот еще  сорцы  для отсылки алертов для создания дев версии клиента, я их пока не пробовал приключивать . Может посже опишу как их приделывать.

https://gist.github.com/laanwj/0e689cfa37b52bcbbb44
https://gist.github.com/gavinandresen/1481736

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

и  у нас  есть контрольная точка спорка в виде 1 нашей мастер ноды.( кошешно же необходимо будет сохранить наш wallet.dat  в котором будут ключи, и после  пересборки клиента  подсунуть его )

 

Как поднять мастер ноду думаю описывать уже не буду , если надо надо могу описать и это :)

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

 

Ну а так по сути  все найти  можно поиском во всех документах, и  банальным сравнением названий параметров. Как пример поиск портов , нашли в 1 сорце порты и проверили сразу  по всем  данное значение  на примере 9999 порта .

 

 

Изменено пользователем tseries
Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Ниче себе человек заморочился, наверно, глаза как у мыши стали

Ссылка на комментарий
Поделиться на другие сайты

Вот мы с @qwer так и не поняли - какая от форканья польза сообществу DASH?

 

Прикольно, спасибо автору за то, что погрузился в тему (хотя я не спец, чтобы оценить качество погружения, но судя по объёму - всё гуд :) ).

 

Польза DASH сообществу я думаю прежде всего в том, что чем больше людей понимает как работает DASH - тем лучше для DASH - и после всяких экспериментов подавляющее большинство экспериментаторов (я надеюсь) присоединится к основному проекту DASH.

 

На мой взгляд, DASH - это одна из самых сложных криптовалют в плане возможности успешно форкнуть (в смысле, что создать конкурента самому DASH):

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

2. У DASH сравнительно очень высокие темпы развития - чтобы оставаться в ногу с основным DASH - разработчикам форка потребуется постоянно прикладывать очень серьезные усилия.

3,4,5 - есть, но не столь важные как 1-2

 

Так что пробовать форкнуть DASH могут многие, но большинство в результате (я надеюсь) присоединяться к родительскому проекту - благо что и система децентрализованного финансирования DASH теперь может поддержать действительно талантливых новых разработчиков и в рамках основного проекта DASH, без необходимости запускать собственную новую криптовалюту.

Изменено пользователем alex ru
Ссылка на комментарий
Поделиться на другие сайты

Мощный материал, спасибо, @tseries!

 

Пункты 1-5 и кусок в конце про сборку бинарников на дебиане хоть и повторяют во многом мануал из доков, но 1) на русском 2) разжевано с виртуалкой, вроде бы, подробнее.

 

Про замены тоже, вроде, все верно. Отдельное спасибо, что порты и префиксы сообщений не забыл - был с год назад какой-то форк неумелый, где про это забыли и лезли со своими сообщениями в нашу сеть. Такое, конечно, все равно реджектилось по доп. проверкам и пользователи ничего не заметили, но неприятно, когда логи засоряет спам от конфликтующей сети. Благо тот форк до больших размеров не дорос и прожил недолго (мы ни при чем, он сам собой сдулся  :D ).

 

Ну, и еще спасибо за упоминание всяких тулзов, про которые я не знал и до сих пор как-то все руками конвертил...  :wacko:

 

Вобщем, однозначно респект и в закладки. Плюсанул.  :)

 

ЗЫ. Про пользу форка как такового: я - за. Сам Dash/Darkcoin/XCoin когда-то стартовал только потому, что Evan хотел эксперементировать на самом низком уровне протокола биткоин, что на тот момент уже было трудно/опасно, т.е. в разумные сроки нереально. Возможно, у кого-то появиться идея как кардинально поменять протокол в части Dash, но провести такие изменения быстро мы не сможем - а тут как раз отличный мануал как стартануть и проверить идею.  :rolleyes:

Ссылка на комментарий
Поделиться на другие сайты

Кидай кошелек, щас свои мощности по Х11 переподключу, будем майнить - монеты сотнями добывать!  :D

Изменено пользователем Ixion
Ссылка на комментарий
Поделиться на другие сайты

Прочитал на одном дыхании. Хотя меня и не интересует форк Дашки, но было интересно и очень познавательно. Побольше бы таких постов.

Плюсую за труд.

Respect.

Ссылка на комментарий
Поделиться на другие сайты

Респект конечно ДА (столько скринов сделать), но я не могу понять практического применения? или человек ищет работу в системе DASH - и так сказать документально доказал свой проф. в данном вопросе? Где адепты монетки - пусть принимают парня к себе на работу! По теме все великолепно, познавательно и доходчиво - но бля.....ну от нахренища? У вас дети, семья  есть?

P.S. Сообщество DASH - как-то обязано оплатить работу человека!

Ссылка на комментарий
Поделиться на другие сайты

По теме все великолепно, познавательно и доходчиво - но бля.....ну от нахренища?

Как это нахренища?

Практически мануал по созданию форка. Не нужно? Ну так это вам не нужно, мне не нужно, а кому-нибудь очень по теме окажется, мало ли. Еще раз повторю, пост - СУПЕР. Побольше бы таких.

Ссылка на комментарий
Поделиться на другие сайты

Может сказывается мой мещанский менталитет, я понимаю, что несет практическую ценность для индивидов, расписано все букавально ПОШАГОВО и? Вы будете делать форк типа Дарков? Создать такой манул - это гора человеко-часов! Правильно?

Ссылка на комментарий
Поделиться на другие сайты

@qwer, зри в корень! Человек показал свою эрудицию и навыки. Он, в случае чего, может найти себе профильную работу, ну например, в той же команде Dash или, не дай Бог, копая дальше, его озарит создать что-то гениальное, как в свое время Сатоши Накомото. Т.е. это нужно было самому автору, это его успех и самовыражение. Не было бы энтузиастов-изобретателей - до сих пор бы на лошадях ездили бы.

Изменено пользователем Ixion
Ссылка на комментарий
Поделиться на другие сайты

@qwer, зри в корень! Человек показал свою эрудицию и навыки. Он, в случае чего, может найти себе профильную работу, ну например, в той же команде Dash или, не дай Бог, копая дальше, его озарит создать что-то гениальное, как в свое время Сатоши Накомото. Т.е. это нужно было самому автору, это его успех и самовыражение. Не было бы энтузиастов-изобретателей - до сих пор бы на лошадях ездили бы.

С такой позиции, вы правы - тут не поспоришь.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...

Вы меня переоцениваете, я простой пользователь с навыками программирования ниже среднего. Данный мануал написан был от наличия факторов энтузиазма и нечего делать.

День прочтения мануалов на энглише и в результате кое какой мануал по созданию криптовалюты. Обязательно сверяйте версии библиотек в мейк файле, они могут меняться.

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Благодарю автора темы, перечитывал несколько раз, всегда было интересно как и что и из чего сделано!  ;)

Ссылка на комментарий
Поделиться на другие сайты

Не выходит последняя компиляция,

Пишет следующее
remote: Repository not found.

 

страенность почему он идет по этому пути когда код лежит здесь: https://github.com/freelion93/mtucicoin/
fatal: repository 'https://github.com/mtucicoin/mtucicoin.git/' not found
./bin/gbuild:21:in `system!': failed to run cd inputs/mtucicoin && git fetch --update-head-ok https://github.com/mtucicoin/mtucicoin.git +refs/tags/*:refs/tags/* +refs/heads/*:refs/heads/* (RuntimeError)
        from ./bin/gbuild:261:in `block in <main>'
        from ./bin/gbuild:249:in `each'
        from ./bin/gbuild:249:in `<main>'
 

Ссылка на комментарий
Поделиться на другие сайты

В проблеме смог частично разобраться, товарищ не указал в конце что нужно также при редактировании текстовых документов с номерами версий также отредактировать путь к своему форку в них, так и появился непонятный редирект "https://github.com/mtucicoin/mtucicoin.git"

Который я в свою очередь переделал в нужный и правильный "https://github.com/freelion93/mtucicoin.git"

но это как оказалось не рещило данную проблему полностью

 

Все еще натыкаюсь на следующую ошибку о том что неизвестная ревизия или путь не лежит в рабочем древе

debian@debian:~/gitian-builder$ ./bin/gbuild --commit mtucicoin=v1.0.0.1 ../mtucicoin/contrib/gitian-descriptors/gitian-win.yml
fatal: ambiguous argument 'v1.0.0.1': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
./bin/gbuild:264:in `block in <main>': error looking up commit for tag v1.0.0.1 (RuntimeError)
        from ./bin/gbuild:249:in `each'
        from ./bin/gbuild:249:in `<main>'
 

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

Войти

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

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

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

    • Grayscale подала заявку на создание трастового фонда на биткоин

      Компания Grayscale Investments подала заявку в Комиссию по ценным бумагам и биржам США (SEC) на создание мини-трастового фонда на биткоин с целью привлечения новых инвесторов. Grayscale Investments, управляющая трастами на цифровые валюты, подала заявку на выпуск акций инвестиционного продукта, получившего название Grayscale Bitcoin Mini Trust. В случае ее одобрения SEC, часть биткоинов, находящихся в Grayscale Bitcoin Trust ETF (GBTC), будут перечислены в новый фонд. Держатели паев GBTC см

      в Новости криптовалют

    • Власти Южной Кореи заявили о запрете на создание биржевых криптовалютных фондов

      Комиссия по финансовым услугам Южной Кореи (FSC) подтвердила актуальность запрета для местных финансовых учреждений на владение и инвестирование средств в криптоактивы. Представитель Комиссии объявил, что одобрение спотовых ETF на биткоин в США не является событием, которое побудило бы регулятора снять или пересмотреть действующие запреты. Стабильность финансовых рынков и защита инвесторов расценивается регулятором на порядки выше, чем принятие популистских решений, считают в FSC.  

      в Новости криптовалют

    • Сколько будет стоить создание платформы вроде кукоина?

      Здравствуйте, друзья.  Знает кто нибудь сколько будет стоить создание обменника вроде кукоина и тд? Понимаю, что недешево, но просто интересна цена такой работы.  У меня уже есть одна трейдинговая платформа, но такое ощущение, что её либо индусы, либо пакистанцы кодили. Вопрос: Сколько будет стоить ее немного довести до ума. Немного - практически полностью:) И знает ли кто нибудь, если где нибудь можно приобрести нормальный подобного рода скрипт?  Благодарю

      в Общий

    • Владельцы ApeCoin отказались потратить $12.1 млн на создание новой серии NFT

      Держатели ApeCoin начали голосование по предложению AIP-304 о создании серии невзаимозаменяемых токенов (NFT) за 11 млн APE. 66% пользователей выступили против этого предложения. Сообщество ApeCoin почти два месяца обсуждает предложение AIP-304, выдвинутое Хуаном Личэном (Huang Licheng), известным как «machibigbrother.eth». В его владении находится 4,24 млн APE на сумму около $4,67 млн.   Идея Личэна состоит в том, чтобы потратить 11 млн токенов APE ($12,1 млн) на создание коллекции,

      в Новости криптовалют

    • Топ-менеджер Coinbase призвал Австралию ускорить создание правил для криптоиндустрии

      Директор отдела политики криптовалютной биржи Coinbase публично обратился к правительству Австралии с просьбой ускорить разработку законодательства о регулировании криптовалют. Иначе страна рискует остаться позади других государств. Фарьяр Ширзад (Faryar Shirzad) на слушаниях в Сенате Австралии заявил, что многие страны уже установили четкие временные рамки появления законов о криптоактивах. Например, в Евросоюзе законопроект о регулировании криптовалют (MiCA) заработает не позднее начала 2

      в Новости криптовалют

×
×
  • Создать...