Translate

2018년 1월 30일 화요일

[COIN][HTML] Linux 에서 지갑 동기화(sync) 되었는지 여부 확인방법





Windows 용 HTML코인 지갑(wallet) 프로그램에서는 동기화가 정상적으로 되었는지 보면 직관적으로 알수가 있어 대부분 알수가 있는데..

리눅스에서는 Windows 처럼 눈에 보여주는 부분이 없어 동기화가 되었는지 직관적으로 볼 수 없으며 Wallet Log 를 통해 동기화가 되었는지 확인을 해야 한다.


1004lucifer
지갑을 구동하면 지갑 프로그램은 처음에 블록을 동기화 하는데 얼마나 동기화가 되었고 동기화가 끝났는지 여부는 data(지갑) 디렉토리의 debug.log 를 통해 볼 수 있다.
(Windows / Linux 공통)




Windows 지갑 디렉토리 기본 경로


 C:\Users\{사용자명}\AppData\Roaming\HTMLCOIN





Linux 지갑 디렉토리 기본 경로
1004lucifer

 {계정_홈디렉토리}/.htmlcoin





tail -f debug.log 명령어를 통해 해당 로그를 실시간으로 볼 수 있는데..
아직 동기화가 되지 않았다면 블럭들의 날짜와 함께 로그가 주르륵 올라가는 것을 볼 수 있다.
동기화가 모두 끝난경우 로그가 이따금씩 한번 나오며 생성된 블록에 대해 추가하거나 채굴 명령어 시작/종료 된 경우 로그가 올라오게 된다.
1004lucifer

root@test:~#
root@test:~# cd ~/.htmlcoin/
root@test:~/.htmlcoin#
root@test:~/.htmlcoin# ll
total 38664
drwxr-xr-x 6 root root     4096 Jan 30 21:17 ./
drwx------ 6 root root     4096 Jan 27 19:46 ../
-rw------- 1 root root       37 Jan 18 11:00 banlist.dat
drwx------ 3 root root     4096 Jan 13 18:44 blocks/
drwx------ 2 root root     4096 Jan 29 18:57 chainstate/
-rw------- 1 root root       75 Jan 13 18:45 .cookie
drwx------ 2 root root     4096 Jan 29 14:04 database/
-rw------- 1 root root        0 Jan 13 18:44 db.log
-rw------- 1 root root 36983975 Jan 30 21:19 debug.log
-rw------- 1 root root     7889 Jan 13 18:44 fee_estimates.dat
-rw------- 1 root root        5 Jan 13 18:45 htmlcoind.pid
-rw------- 1 root root        0 Jan 13 18:44 .lock
-rw------- 1 root root       17 Jan 13 18:44 mempool.dat
-rw------- 1 root root  2429076 Jan 30 21:17 peers.dat
drwx------ 4 root root     4096 Jan 13 18:44 stateHTMLCOIN/
-rw------- 1 root root     2800 Jan 13 18:55 vm.log
-rw------- 1 root root   114688 Jan 30 20:58 wallet.dat
root@test:~/.htmlcoin#
root@test:~/.htmlcoin#
root@test:~/.htmlcoin# tail -f debug.log
2018-01-30 12:20:21 UpdateTip: new best=e18b4216670c2ebc92c592e9ade9240ed1767613f8030d0e4e1eba2bb2789eaa height=101653 version=0x20000000 log2_work=78.568299 tx=191954 date='2018-01-30 12:20:32' progress=1.702414 cache=2.0MiB(549txo)
2018-01-30 12:20:21 ProcessNetBlock: ACCEPTED
2018-01-30 12:20:22 ProcessSyncCheckpoint: sync-checkpoint at 1b256c813312c61a3feb4abfc2a8694ac04badcdc3fe5a2d46f3145740ed7508
2018-01-30 12:20:22 ProcessMessage: hashCheckpoint=1b256c813312c61a3feb4abfc2a8694ac04badcdc3fe5a2d46f3145740ed7508
2018-01-30 12:21:07 UpdateTip: new best=e97218a2ace31f78ff284b5998d9e66fbb5012b12a6eebfb4c747b58cd6b9485 height=101654 version=0x20000000 log2_work=78.56833 tx=191956 date='2018-01-30 12:21:20' progress=1.951645 cache=2.0MiB(554txo)
2018-01-30 12:21:07 ProcessNetBlock: ACCEPTED
2018-01-30 12:21:07 ProcessSyncCheckpoint: sync-checkpoint at 2a2e8e0cef820ce0a17a7a68cf4b58bd2eec2445860e4093c4b045f4f4725db2
2018-01-30 12:21:07 ProcessMessage: hashCheckpoint=2a2e8e0cef820ce0a17a7a68cf4b58bd2eec2445860e4093c4b045f4f4725db2

root@test:~/.htmlcoin#








동기화 중에는 아래와 같이 블록이 추가되는 것을 볼 수 있다.
(date 항목이 최근 날짜까지 동기화 되어야 하며, 이미 동기화가 끝난 경우라면 1~2분에 한번씩 블록이 추가되는것을 볼 수 있다.)


2018-01-30 14:53:30 UpdateTip: new best=0000cd28a45e9c112fb0be0675641777a5ae86399af2ba3239c72c011d264349 height=1205 version=0x20000000 log2_work=34.589381 tx=1221 date='2017-11-21 14:35:16' progress=0.000000 cache=0.2MiB(1230txo)
2018-01-30 14:53:30 ProcessNetBlock: ACCEPTED
2018-01-30 14:53:30 UpdateTip: new best=00000c109b05d64f5bdb58e6889b099fffaf1c3e7bd8ffe41f7d055968a2a658 height=1206 version=0x20000000 log2_work=34.589384 tx=1222 date='2017-11-21 14:35:16' progress=0.000000 cache=0.2MiB(1231txo)
2018-01-30 14:53:30 ProcessNetBlock: ACCEPTED
2018-01-30 14:53:30 UpdateTip: new best=0000b913755232930f9a9f5c5b32fba8ca70ac6bec85e734328fd96773e8a600 height=1207 version=0x20000000 log2_work=34.589388 tx=1223 date='2017-11-21 14:35:16' progress=0.000000 cache=0.2MiB(1232txo)
2018-01-30 14:53:30 ProcessNetBlock: ACCEPTED





2018년 1월 28일 일요일

[Ubuntu] Temporary failure resolving 'kr.archive.ubuntu.com' 에러 해결방법





우분투에서 apt-get update 명령어 실행 시 아래와 같이 오류가 발생하며 작동하지 않았다.
(apt-get dist-upgrade 명령어도 마찬가지..)
1004lucifer

lucifer@ubuntu:~$
lucifer@ubuntu:~$ sudo apt-get update
[sudo] password for lucifer:
Err:1 http://kr.archive.ubuntu.com/ubuntu xenial InRelease
  Temporary failure resolving 'kr.archive.ubuntu.com'
Err:2 http://security.ubuntu.com/ubuntu xenial-security InRelease
  Temporary failure resolving 'security.ubuntu.com'
Err:3 http://kr.archive.ubuntu.com/ubuntu xenial-updates InRelease
  Temporary failure resolving 'kr.archive.ubuntu.com'
Err:4 http://kr.archive.ubuntu.com/ubuntu xenial-backports InRelease
  Temporary failure resolving 'kr.archive.ubuntu.com'
Reading package lists... Done
W: Failed to fetch http://kr.archive.ubuntu.com/ubuntu/dists/xenial/InRelease  Temporary failure resolving 'kr.archive.ubuntu.com'
W: Failed to fetch http://kr.archive.ubuntu.com/ubuntu/dists/xenial-updates/InRelease  Temporary failure resolving 'kr.archive.ubuntu.com'
W: Failed to fetch http://kr.archive.ubuntu.com/ubuntu/dists/xenial-backports/InRelease  Temporary failure resolving 'kr.archive.ubuntu.com'
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/xenial-security/InRelease  Temporary failure resolving 'security.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.
lucifer@ubuntu:~$







원인

해당 우분투 서버에 등록된 DNS 에서 kr.archive.ubuntu.com 를 찾을 수가 없는상황.





해결방법

구글 공개 DNS 서버를 등록하여 해당 도메인을 찾을 수 있게 만든다.
1004lucifer

lucifer@ubuntu:~$ sudo vi /etc/resolv.conf

# 아래의 문자열을 추가한다.
nameserver 8.8.8.8
nameserver 8.8.4.4



네트워크를 재기동 한다.


lucifer@ubuntu:~$
lucifer@ubuntu:~$ ifconfig
enp0s3    Link encap:Ethernet  HWaddr 08:00:27:8b:e5:59
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe8b:e559/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:241073 errors:0 dropped:0 overruns:0 frame:0
          TX packets:112078 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:197342115 (197.3 MB)  TX bytes:7417090 (7.4 MB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:172 errors:0 dropped:0 overruns:0 frame:0
          TX packets:172 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:12786 (12.7 KB)  TX bytes:12786 (12.7 KB)

lucifer@ubuntu:~$ # 아래의 enp0s3 은 본인의 NIC이름에 맞게 변경한다.
lucifer@ubuntu:~$ sudo ifdown enp0s3 && sudo ifup enp0s3
[sudo] password for lucifer:
Killed old client process
Internet Systems Consortium DHCP Client 4.3.3
Copyright 2004-2015 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/enp0s3/08:00:27:8b:e5:59
Sending on   LPF/enp0s3/08:00:27:8b:e5:59
Sending on   Socket/fallback
DHCPRELEASE on enp0s3 to 10.0.2.2 port 67 (xid=0x7f7fabc5)
Internet Systems Consortium DHCP Client 4.3.3
Copyright 2004-2015 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/enp0s3/08:00:27:8b:e5:59
Sending on   LPF/enp0s3/08:00:27:8b:e5:59
Sending on   Socket/fallback
DHCPDISCOVER on enp0s3 to 255.255.255.255 port 67 interval 3 (xid=0x2176fd7b)
DHCPDISCOVER on enp0s3 to 255.255.255.255 port 67 interval 3 (xid=0x2176fd7b)
DHCPREQUEST of 10.0.2.15 on enp0s3 to 255.255.255.255 port 67 (xid=0x7bfd7621)
DHCPOFFER of 10.0.2.15 from 10.0.2.2
DHCPACK of 10.0.2.15 from 10.0.2.2
bound to 10.0.2.15 -- renewal in 33886 seconds.
lucifer@ubuntu:~$






apt-get 명령어가 정상적으로 되는 것을 확인할 수 있다.
1004lucifer

lucifer@ubuntu:~$
lucifer@ubuntu:~$ sudo apt-get update
Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]
Hit:2 http://kr.archive.ubuntu.com/ubuntu xenial InRelease
Hit:3 http://kr.archive.ubuntu.com/ubuntu xenial-updates InRelease
Hit:4 http://kr.archive.ubuntu.com/ubuntu xenial-backports InRelease
Fetched 102 kB in 8s (12.3 kB/s)
Reading package lists... Done
lucifer@ubuntu:~$
lucifer@ubuntu:~$
lucifer@ubuntu:~$
lucifer@ubuntu:~$
lucifer@ubuntu:~$ sudo apt-get dist-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  libdrm-common linux-headers-4.4.0-112 linux-headers-4.4.0-112-generic linux-image-4.4.0-112-generic linux-image-extra-4.4.0-112-generic
The following packages will be upgraded:
  apparmor apport bind9-host ca-certificates cloud-initramfs-copymods cloud-initramfs-dyn-netconf cryptsetup cryptsetup-bin curl distro-info-data dnsmasq-base dnsutils dpkg gcc-5-base git git-man grub-legacy-ec2 initramfs-tools initramfs-tools-bin initramfs-tools-core
  iproute2 klibc-utils libapparmor-perl libapparmor1 libbind9-140 libc-bin libc6 libcryptsetup4 libcurl3-gnutls libdb5.3 libdns-export162 libdns162 libdrm2 libgnutls-openssl27 libgnutls30 libicu55 libidn11 libisc-export160 libisc160 libisccc140 libisccfg140 libklibc
  liblwres141 libmspack0 libpam-systemd libperl5.22 libplymouth4 libpython3.5 libpython3.5-minimal libpython3.5-stdlib libseccomp2 libssl1.0.0 libstdc++6 libsystemd0 libtasn1-6 libudev1 libxml2 linux-firmware linux-generic linux-headers-generic linux-image-generic
  locales logrotate lshw lxcfs lxd lxd-client mdadm multiarch-support openssh-client openssh-server openssh-sftp-server openssl overlayroot perl perl-base perl-modules-5.22 plymouth plymouth-theme-ubuntu-text python3-apport python3-distupgrade python3-problem-report
  python3-update-manager python3.5 python3.5-minimal resolvconf rsync snapd squashfs-tools systemd systemd-sysv tcpdump tzdata ubuntu-minimal ubuntu-release-upgrader-core ubuntu-server ubuntu-standard udev unattended-upgrades update-manager-core update-notifier-common
  vlan wget xfsprogs
104 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
Need to get 184 MB of archives.
After this operation, 369 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 dpkg amd64 1.18.4ubuntu1.3 [2,084 kB]
Get:2 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libperl5.22 amd64 5.22.1-9ubuntu0.2 [3,391 kB]
Get:3 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 perl amd64 5.22.1-9ubuntu0.2 [237 kB]
Get:4 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 perl-base amd64 5.22.1-9ubuntu0.2 [1,282 kB]
Get:5 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 perl-modules-5.22 all 5.22.1-9ubuntu0.2 [2,661 kB]
Get:6 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libc6 amd64 2.23-0ubuntu10 [2,580 kB]
Get:7 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libdb5.3 amd64 5.3.28-11ubuntu0.1 [670 kB]
Get:8 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 locales all 2.23-0ubuntu10 [3,213 kB]
Get:9 http://kr.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libc-bin amd64 2.23-0ubuntu10 [641 kB]




참고
 - https://developers.google.com/speed/public-dns/docs/using
 - https://askubuntu.com/questions/91543/apt-get-update-fails-to-fetch-files-temporary-failure-resolving-error
 - https://askubuntu.com/questions/892569/apt-get-update-not-working-in-ubuntu-16-04-temporary-failure-resolving/907569#907569


[COIN][HTML] GPU 채굴 루머에 대해서..




======================
2018.02.20 내용 추가

HTML코인 커뮤니티에 GPU 채굴이 의심되는 지갑에 대해서 글이 올라왔다.
https://www.reddit.com/r/htmlcoin_community/comments/7y5ch9/looks_like_html_now_being_mined_by_data_center_or/


난이도 100 이상이 되어버리면 GPU 채굴이 의심이 된다고 하던데..
HTML코인 소스를 분석하다보니 내가보기에는 현재의 난이도로는 GPU 채굴 뿐만이 아니라 채굴자들이 많아져서 그런게 아닌가 싶다.

그 이유는 아래와 같다.
1. HTML코인이 최근 랭킹이 급속도로 상승을 했다.
2. 채굴자가 많아질 수록 난이도는 당연히 상승한다.

소스 제대로 분석이 안되었을 때 난이도가 저렇게 까지 높아질 수 있을가 싶었는데..
소스 분석을 좀더 하다보니 컴퓨팅 파워가 아무리 낮아도 참여자의 수가 많아질 수록 난이도는 무한정으로 계속 높아지며, POS 채굴을 포함하여 난이도가 재계산 되는 방식이다보니 더 높아지지 않았을까 싶다.
1004lucifer
현재 난이도는 높아봐야 200 초반인데..
순위 1000위 다른 코인들의 GPU 난이도를 보면 엄청나다.



GPU 채굴 의심이 된다는 이야기를 듣고 나 또한 채굴풀을 만들어 GPU 로 채굴을 시도해 보았다.
GPU 클라이언트 채굴툴을 이용해 채굴풀에 접속하여 채굴을 시도했는데..
'block decode failed' 라는 메시지가 나오며 채굴에 실패를 하였다.



혹시나 싶어 인터넷에 검색해보니 나와 같은 사람이 있었다..ㅋㅋ
https://www.freelancer.com/projects/php/solve-cryptocurrency-wallet-mining-pool


계속 마이닝풀로 채굴을 하고있었는데 최근 오류가 나서 고쳐줄 개발 프리랜서를 구하는 글이 올라왔다.


나도 직접 수정해서 GPU 채굴을 해볼가 싶었는데..
자바만 할줄알고 C++을 제대로 못하다보니..
클라이언트 GPU 마이닝툴을 수정할 능력이 없어 포기했다.ㅠ


HTML코인 자체가 오픈소스이다보니..
GPU 마이닝을 못하게 하는것 또한 소스를 보면 알 수 있어 패치또한 가능할 것으로 보인다.

지금의 난이도를 생각하면 일부 개인이나 소규모에서 마이닝풀을 셋팅해서 GPU 마이닝을 하는것으로 보이나 아직 그리 규모가 크지 않을 것으로 예상이 된다.

https://coinmarketcap.com/ 사이트의 150위 정도에 위치하고 있으니..
사람들의 관심이 많아져 GPU 채굴이 가능한 마이닝풀이 생기고..
일반 채굴자들이 많아져 난이도가 올라가는 것은 당연하다고 생각이 든다.


======================



HTML코인 개발자 수염아저씨가 아래와 같은 글을 트윗했다.




그리고 아래와 같은 말도..


Joo Richard:
By the way, if you see the PoW difficulty over 100 that means someone is running GPU mining
If it is below 100, then it is CPU mining
So right now someone is testing GPU mining
If any Korean members are interested in mining, please tell them to get ready for a GPU mining
When the GPU mining is running, you will see PoW difficulty goes way up and will never go below 100
And I think few group of devs are trying to make it happen and getting closer to be done
So we will see how it goes





최근 난이도가 높아져 채굴이 너무 안되서 커뮤니티에서 말이 많던데..
누군가 GPU 마이닝을 테스트 중이어서 난이도가 많이 올라갔으니 400만 코인 현상금을 걸어놓은것 같다.

근데 뭐,, GPU 마이너는 소스 오픈 없이 계속 GPU 마이닝으로 코인을 독점하지 않을까 싶다.





HTML코인 소스를 분석하다가 작성한 글과 같이..
[COIN][HTML] 소스 분석을 하다보니.. BITCOIN 으로 이어지는구나..ㅎㅎ

HTML코인이 QTUM(퀀텀) 기반으로 만든 코인인데..
퀀텀 또한 BITCOIN 기반으로 되어있는 것을 확인할 수 있었다.


비트코인이 SHA256 알고리즘을 사용하고..
HTML코인은 Double SHA256 알고리즘을 사용하는데..
1004lucifer
어떻게 보면 SHA256 두번 돌리면 되는거라 큰차이가 없어 비트코인이 GPU 마이닝 할 수 있으니 이것도 GPU 마이닝이 가능하지 않을까 생각을 해봤는데 이미 하고있는 사람이 있었구나 싶다.



[COIN][HTML] CPU 채굴 시 간과할 수 있는 부분과 효율적으로 채굴하는 방법





최근 HTML코인 CPU 채굴을 해보고 있는데
흔히 접할 수 있는 PC들의 CPU가 멀티코어/멀티쓰레드 지원이 된다.


CPU 채굴을 진행하면 윈도우의 작업관리자에서 CPU 사용량이 증가하는데..
채굴 프로그램 구동 시 1개 Thread 100% 사용이라고 보면 된다.
1004lucifer

PC 에서 채굴 프로그램 구동 시 CPU Thread 갯수에 따라 CPU 사용량이 달라진다.
 - 2 Thread: 50% 사용
 - 4 Thread: 25% 사용
 - 8 Thread: 12~13% 사용
 - 16 Thread: 6~7% 사용


PC 1개에 채굴프로그램을 여러개 띄울 수 있는데..
4 Thread PC 에서는 채굴 프로그램 3개를 띄워 CPU 75% 부하로 운영할 수 있다.




문제

처음에 무작정 채굴 프로그램을 많이 띄우는게 좋을것 같아
제온 12코어/24쓰레드 PC에서 20개의 채굴 프로그램을 구동했었다.
(CPU 사용율 90%)



원인분석

근데 각각의 채굴 수행되는 시간이 생각보다 늦어져서 혹시나 싶어 채굴프로그램을 하나하나 끌 때마다 다른 채굴들의 속도가 빨라지는 것을 볼 수 있었다.
1004lucifer
채굴프로그램(명령어) 수행-종료 되는 시간을 측정해 보았다.

채굴프로그램갯수: 각각의 채굴프로그램 수행시간
20개: 5분30초
16개: 4분20초
14개: 3분40초
12개: 3분10초
10개: 3분
08개: 3분


컴퓨터가 12코어/24 쓰레드 이다보니..
코어갯수에 따른 12개 이하로는 채굴프로그램을 더 종료해도 채굴 시간에 영향을 미치지 못했다.


생각해보니.. 실제로 일을 하는건 코어가 일을 하는거고..
Thread 자체는 코어에서 해야 하는일을 스무스하게 나눠서 분산처리를 해주는 거라서 코어 갯수 이상으로 채굴을 하게되면 채굴프로그램의 퍼포먼스가 안나올 수 밖에 없다.



결론

현재 해당 서버는 코어갯수대로 12개의 채굴 프로그램을 가동하도록 변경했고 각각 채굴에서의 가장 효율적인 방향으로 잡았다.
1004lucifer
CPU 사용율은 50%가 되었지만 채굴 시간이 늘어나면서 까지 채굴 프로그램을 여러개 돌리는게 좋은것일까 생각해봤는데..

누군가 채굴에 성공하게되면 새로운 해시값을 다시 뽑아야 하기 때문에 채굴 확률을 올리기 위해서는 마이닝 시간은 무조건 빨라야 하는게 좋다고 생각이 든다.
(그렇다면.. 채굴시간에 영향을 받지 않는 범위내에서 채굴을 많이 돌리는게 제일 효율적이라 생각이 들었다.)


[COIN][HTML] generate 채굴 명령어 사용 시 채굴은 어떤식으로 진행되는가?





HTML 코인의 채굴명령어는 아래와 같다.


 generate [blocks] [retry]

 ex) generate 100 999999999






최근들어 채굴이 잘 되지 않아 명령어를 조금씩 바꿔보며 테스트를 해보는데..
(뒤에 있는 9의 숫자가 적을수록 채굴 명령어가 빨리 끝난다.)
generate 100 999999999
generate 100 99999999
generate 100 9999999


채굴이 안되면 이 명령어가 잘못되어 채굴이 안되는건지..
또 채굴이 되면 이 명령어가 효율이 좋아서 채굴이 된건지..

너무 답답한 마음에 HTML코인의 소스를 분석해 보기로 했다.
* retry 숫자에 따른 영향(결론)은 제일 하단에..




[https://github.com/HTMLCOIN/HTMLCOIN/blob/master/src/rpc/mining.cpp]

1. generate 명령어 수행 시 수행되는 부분


 - generate / generatetoaddress 명령어가 실행되는 부분이 보인다. (로직은 거의 동일)
 - 174: retry횟수(99999999)를 넣어주지 않으면 디폴트로 1000000 으로 대체된다.
 - 180: 지갑 정보 생성
 - 190: generateBlocks()을 수행한다.
1004lucifer


2. 채굴되는 부분 (generateBlocks)


 - 104: 인자값으로 (지갑정보, 블록갯수(100), retry(999999999), boolean) 전달받는다.
 - 122: 지정한 블록갯수 만큼 루프를 수행한다.
 - 124: 블록을 초기화 한다. (아래에서 추가 설명)
 - 124: 블록을 생성 한다. (아래에서 추가 설명)
 - 132~135: retry 횟수만큼 nonce를 증가시키며 해시값을 만들어 조건에 맞는지 확인.
 - 136: retry 만큼 다 돌았는데 조건에 맞는 해시함수가 없다면 종료한다.
 - 139: nonce 값이 최대값과 동일하다면 132 조건을 다시 수행한다.
 - 143: 정상조건에 맞는 해시값 생성되었다면 블록 추가하여 네트워크에 공유. (채굴성공)
 - 146: 반환할 변수에 해당 블록의 해시값을 추가한다.
 - 122~153: 채굴 성공한경우 122부터 다시 수행한다. (블록갯수 100 만큼 반복)


 위와같은 로직으로 인해 generate 100 999999999 명령어 한번 수행 시 100번의 채굴(블록생성)을 시도하며 각각의 블록생성 시도당 99999999 번 시도를 하게된다.

 드믈게 명령어 한번에 연속 적으로 채굴(블록생성)에 성공한 경우
 [
  "saf6s4a5f3sa54f35243354sdfaas4f",
  "asdf65sa4df68sa4d6846sa84gas6",
  ...
 ]

 위와같이 나오며 이론상으로는 명령어와 같이 100번 연속으로 채굴이 되었다고 하면 명령어 한번에 해시값이 최대 100개 정도가 나오게 된다.





[https://github.com/HTMLCOIN/HTMLCOIN/blob/master/src/miner.cpp]

3. 블록 초기화 부분 (BlockAssembler)


 - 블록의 가본값들을 셋팅한다.



4. 블록 생성 부분 (CreateNewBlock)


 - 여러가지 셋팅
 - 245~275: QTUM(퀀텀)의 소스가 그대로 들어있다.
 - 288: 이전 블록 헤더의 해시값을 생성
 - 289: 블록의 nonce 를 0으로 셋팅






결론

- 채굴 시 블록 생성 후 nonce를 이용하여 난이도에 맞는 해시값을 구하게 되며 nonce 값은 0 부터 시작하여 retry 값 만큼 숫자를 올리며 재시도를 하게된다.

예를 들어 아래와 같다.
(조건(난이도) 앞에 0이 5개가 있는 숫자보다 낮은 값의 해시를 뽑으려면??)

0 => 6546514sa6df5462834r6wae54sadf65
1 => 01sdf84we1sfsa3f5sd4fsf5sdf1s3fsd5f
2 => 1saf51234418254ydrhd1fh2sdfh3sd5
...
5213245 => 00000b8saf4we3te5tsd1dfg3hg5sdt

위 같은 해시값을 뽑기위해 nonce 값을 계속 증가시켜 해시를 구해야 한다.



[retry 숫자가 적은경우 - 999999]
 - 장점: 채굴이 빨리 끝나기 때문에 이미 다른 곳에서 이미 채굴이 된 상황에서 삽질을 덜하고 새로운 채굴을 할 수 있다.
 - 단점: 난이도가 높은경우 해당 retry 내에서 해시값이 나오지 않을 수 있다. 의미없는 일을 하게되는 경우가 발생할 수 있다.
1004lucifer
[retry 숫자가 높은경우 - 999999999]
 - 장점: 난이도가 높아도 왠만한 해시값을 추출할 수 있다.
 - 단점: 한번 명령어가 수행하는데 시간이 오래 걸리며, 다른곳에서 먼저 채굴이 되어버린 경우 의미없는 삽질을 하게된다.




===========================
2018.02.20 추가

HTML코인 소스를 분석하며 새로 알게된 것을 추가한다.

다른 곳에서 먼저 채굴이 된 경우 해당 블럭의 Header 및 height 값을 해시값을 구할 때 실시간으로 적용시켜 의미없는 일을 하지 않는다.

다만 retry 숫자가 999와 같이 너무 짧은 숫자의 경우에는 의미가 없을 수 있지만..
1~2분 내에 블록이 생성되는 지금 시점에서는 9999999 정도로 2분이상 걸리는 횟수를 입력하면 별로 낭비하는 일은 없을꺼라 생각이 든다.


2018년 1월 27일 토요일

[COIN][HTML] 소스 분석을 하다보니.. BITCOIN 으로 이어지는구나..ㅎㅎ





HTML 코인 채굴을 재미삼아 하다가 최근들어 채굴이 너무 안되어 어떻게 하면 더 채굴이 잘 될 수 있을까 연구를 했다.


HTML 코인 에서는 generate 100 999999999 라는 명령어를 통해 채굴을 할 수 있는데..

999999999 에서 숫자를 줄여 9999 과 같이 명령어를 날리면 채굴실행이 빨리 되었다.

999999999 라는 부분이 retry 라고 설명이 되어있지..
99999999  라는걸 10번 하면 같은건가 싶어서..
1004lucifer
코인의 설계 개념을 공부하고 결국에는 HTML 코인의 소스를 들여다 보게 되었다.




블럭을 만든 후 확인을 하는 소스를 확인하다 UintToArith256 라는걸 github검색(링크)을 해봐도 알수가 없어 구글에 검색을 한번 해봤더니 비트코인에서도 동일한 코드가 있다는 것을 접했다.
(소스 제일 하단의 CheckProofOfWork 메소드의 내용이 동일하다.)

1004lucifer
[HTML]
https://github.com/HTMLCOIN/HTMLCOIN/blob/master/src/pow.cpp

[BITCOIN]
https://github.com/bitcoin/bitcoin/blob/master/src/pow.cpp





HTML코인이 퀀텀(QTUM)을 하드포크 해서 만든걸로 알고있는데..
퀀텀도 결국엔 비트코인이 전신이었던건가 싶다.


[SASS] 설치 오류 - ffi






공식홈페이지의 방법대로 SASS 설치 시 ffi 관련 에러가 나며 설치가 정상적으로 되지 않았다.

아래와 같이 SASS를 정상적으로 설치할 수 있었다.
(ruby 설치가 되어있는 상황)




C:\Users\1004lucifer\IdeaProjects\Project\gentelella>gem install sass
Fetching: rb-fsevent-0.10.2.gem (100%)
Successfully installed rb-fsevent-0.10.2
Fetching: ffi-1.9.18-x64-mingw32.gem (100%)
ERROR:  Error installing sass:
        The last version of ffi (< 2, >= 0.5.0) to support your Ruby & RubyGems was 1.9.18. Try installing it with `gem install ffi -v 1.9.18` and then running the current command again
        ffi requires Ruby version < 2.5, >= 2.0. The current ruby version is 2.5.0.

C:\Users\1004lucifer\IdeaProjects\Project\gentelella>
C:\Users\1004lucifer\IdeaProjects\Project\gentelella>
C:\Users\1004lucifer\IdeaProjects\Project\gentelella>
C:\Users\1004lucifer\IdeaProjects\Project\gentelella>gem install ffi -v 1.9.18
ERROR:  Error installing ffi:
        The last version of ffi (= 1.9.18) to support your Ruby & RubyGems was 1.9.18. Try installing it with `gem install ffi -v 1.9.18`
        ffi requires Ruby version < 2.5, >= 2.0. The current ruby version is 2.5.0.

C:\Users\1004lucifer\IdeaProjects\Project\gentelella>
C:\Users\1004lucifer\IdeaProjects\Project\gentelella>
C:\Users\1004lucifer\IdeaProjects\Project\gentelella>
C:\Users\1004lucifer\IdeaProjects\Project\gentelella>ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x64-mingw32]

C:\Users\1004lucifer\IdeaProjects\Project\gentelella>
C:\Users\1004lucifer\IdeaProjects\Project\gentelella>
C:\Users\1004lucifer\IdeaProjects\Project\gentelella>gem install ffi -f
Successfully installed ffi-1.9.18-x64-mingw32
Parsing documentation for ffi-1.9.18-x64-mingw32
Installing ri documentation for ffi-1.9.18-x64-mingw32
Done installing documentation for ffi after 3 seconds
1 gem installed

C:\Users\1004lucifer\IdeaProjects\Project\gentelella>
C:\Users\1004lucifer\IdeaProjects\Project\gentelella>gem install sass
Fetching: rb-inotify-0.9.10.gem (100%)
Successfully installed rb-inotify-0.9.10
Fetching: sass-listen-4.0.0.gem (100%)
Successfully installed sass-listen-4.0.0
Fetching: sass-3.5.5.gem (100%)
Successfully installed sass-3.5.5
Parsing documentation for rb-inotify-0.9.10
Installing ri documentation for rb-inotify-0.9.10
Parsing documentation for sass-listen-4.0.0
Installing ri documentation for sass-listen-4.0.0
Parsing documentation for sass-3.5.5
Installing ri documentation for sass-3.5.5
Done installing documentation for rb-inotify, sass-listen, sass after 21 seconds
3 gems installed

C:\Users\1004lucifer\IdeaProjects\Project\gentelella>




2018년 1월 14일 일요일

[Java][Jackson] ObjectMapper.readValue(URL, CLASS) 진행 중 Read timed out 증상




특별히 문제가 없어보이는데 아래의 로그와 같이 Exception 이 발생한 경우가 있었다.


1004lucifer

com.fasterxml.jackson.databind.JsonMappingException: Read timed out (through reference chain: kr.co._1004lucifer.vo.UserVoClass1["result"]->kr.co._1004lucifer.vo.UserVoClass2["list"]->java.util.ArrayList[15])
        at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:388)
        at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:360)
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:308)
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:259)
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:26)
        at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:504)
        at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:101)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:276)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:140)
        at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:504)
        at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:101)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:276)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:140)
        at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3798)
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2797)
        at kr.co._1004lucifer.UserService.getList(UserService.java:33)
        at kr.co._1004lucifer.UserService.getListAllPage(UserService.java:56)
        at kr.co._1004lucifer.UserController.mergeAll(UserController.java:50)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)
        at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.SocketTimeoutException: Read timed out
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
        at java.net.SocketInputStream.read(SocketInputStream.java:171)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
        at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:593)
        at sun.security.ssl.InputRecord.read(InputRecord.java:532)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:983)
        at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:940)
        at sun.security.ssl.AppInputStream.read(AppInputStream.java:105)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
        at sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:552)
        at sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:609)
        at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:696)
        at java.io.FilterInputStream.read(FilterInputStream.java:133)
        at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3393)
        at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._loadMore(UTF8StreamJsonParser.java:204)
        at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._loadMoreGuaranteed(UTF8StreamJsonParser.java:2404)
        at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._decodeUtf8_3(UTF8StreamJsonParser.java:3344)
        at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishString2(UTF8StreamJsonParser.java:2523)
        at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishAndReturnString(UTF8StreamJsonParser.java:2469)
        at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.getText(UTF8StreamJsonParser.java:315)
        at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:31)
        at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)
        at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:504)
        at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:101)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:276)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:140)
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:287)
        ... 28 more









응답이 늦어 JAVA default Timeout 시간을 초과했나보다.
1004lucifer
아래와 같이 SpringBoot 기동 시 JAVA로 시간을 셋팅해 줬더니 이후 문제가 발생하지 않았다.


@SpringBootApplication
@EnableScheduling
@EnableAsync
public class MainApplication extends SpringBootServletInitializer implements CommandLineRunner {

 @Override
 protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
  System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
  System.setProperty("sun.net.client.defaultReadTimeout", "10000");
  return builder.sources(MainApplication.class);
 }
 
 ...
 
}


java, jackson, timeout, 


참고
- https://stackoverflow.com/questions/34166611/jackson-json-how-to-set-http-connection-and-read-timeout
- https://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html




2018년 1월 12일 금요일

[COIN][HTML] Linux에 HTML COIN Wallet 설치 방법




How to install the HTMLCOIN wallet in linux




OS: Ubuntu 16/17

리눅스에서 HTML Coin Wallet(지갑) 설치를 해보았다.


Wallet 설치 명령어와 결과는 아래와 같다.


lucifer@1004lucifer:~$
lucifer@1004lucifer:~$ sudo apt-get update
Hit:1 http://kr.archive.ubuntu.com/ubuntu xenial InRelease
Hit:2 http://kr.archive.ubuntu.com/ubuntu xenial-updates InRelease
Hit:3 http://kr.archive.ubuntu.com/ubuntu xenial-backports InRelease
Hit:4 http://security.ubuntu.com/ubuntu xenial-security InRelease
Reading package lists... Done
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$ sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils git cmake libboost-all-dev
[sudo] password for lucifer:
Reading package lists... Done
Building dependency tree
Reading state information... Done
automake is already the newest version (1:1.15-4ubuntu1).
autotools-dev is already the newest version (20150820.1).
bsdmainutils is already the newest version (9.0.6ubuntu3).
build-essential is already the newest version (12.1ubuntu2).
libtool is already the newest version (2.4.6-0.1).
pkg-config is already the newest version (0.29.1-0ubuntu1).
libboost-all-dev is already the newest version (1.58.0.1ubuntu1).
cmake is already the newest version (3.5.1-1ubuntu3).
git is already the newest version (1:2.7.4-0ubuntu1.3).
libevent-dev is already the newest version (2.0.21-stable-2ubuntu0.16.04.1).
libssl-dev is already the newest version (1.0.2g-1ubuntu4.10).
0 upgraded, 0 newly installed, 0 to remove and 93 not upgraded.
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$ sudo apt-get install software-properties-common
Reading package lists... Done
Building dependency tree
Reading state information... Done
software-properties-common is already the newest version (0.96.20.7).
0 upgraded, 0 newly installed, 0 to remove and 93 not upgraded.
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$ sudo add-apt-repository ppa:bitcoin/bitcoin
 Stable Channel of bitcoin-qt and bitcoind for Ubuntu, and their dependencies

Note that you should prefer to use the official binaries, where possible, to limit trust in Launchpad/the PPA owner.

No longer supports precise, due to its ancient gcc and Boost versions.
 More info: https://launchpad.net/~bitcoin/+archive/ubuntu/bitcoin
Press [ENTER] to continue or ctrl-c to cancel adding it

gpg: keyring `/tmp/tmpq_kgf_zc/secring.gpg' created
gpg: keyring `/tmp/tmpq_kgf_zc/pubring.gpg' created
gpg: requesting key 8842CE5E from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpq_kgf_zc/trustdb.gpg: trustdb created
gpg: key 8842CE5E: public key "Launchpad PPA for Bitcoin" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$ sudo apt-get update
Hit:1 http://kr.archive.ubuntu.com/ubuntu xenial InRelease
Hit:2 http://kr.archive.ubuntu.com/ubuntu xenial-updates InRelease
Hit:3 http://kr.archive.ubuntu.com/ubuntu xenial-backports InRelease
Hit:4 http://ppa.launchpad.net/bitcoin/bitcoin/ubuntu xenial InRelease
Hit:5 http://security.ubuntu.com/ubuntu xenial-security InRelease
Reading package lists... Done
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$ sudo apt-get install libdb4.8-dev libdb4.8++-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
libdb4.8-dev is already the newest version (4.8.30-xenial4).
libdb4.8++-dev is already the newest version (4.8.30-xenial4).
0 upgraded, 0 newly installed, 0 to remove and 93 not upgraded.
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$ git clone https://github.com/HTMLCOIN/HTMLCOIN --recursive
Cloning into 'HTMLCOIN'...
remote: Counting objects: 83692, done.
remote: Compressing objects: 100% (115/115), done.
remote: Total 83692 (delta 42), reused 60 (delta 33), pack-reused 83543
Receiving objects: 100% (83692/83692), 72.45 MiB | 681.00 KiB/s, done.
Resolving deltas: 100% (62834/62834), done.
Checking connectivity... done.
Submodule 'src/cpp-ethereum' (https://github.com/HTMLCOIN/cpp-ethereum.git) registered for path 'src/cpp-ethereum'
Cloning into 'src/cpp-ethereum'...
remote: Counting objects: 114788, done.
remote: Total 114788 (delta 0), reused 0 (delta 0), pack-reused 114788
Receiving objects: 100% (114788/114788), 49.25 MiB | 819.00 KiB/s, done.
Resolving deltas: 100% (73850/73850), done.
Checking connectivity... done.
Submodule path 'src/cpp-ethereum': checked out '488ccdc7cef0a0b4fa54c88b7e44e43ed8316ea7'
Submodule 'evmjit' (https://github.com/ethereum/evmjit) registered for path 'evmjit'
Cloning into 'evmjit'...
remote: Counting objects: 6808, done.
remote: Total 6808 (delta 0), reused 0 (delta 0), pack-reused 6808
Receiving objects: 100% (6808/6808), 2.00 MiB | 669.00 KiB/s, done.
Resolving deltas: 100% (4412/4412), done.
Checking connectivity... done.
Submodule path 'src/cpp-ethereum/evmjit': checked out '81fc5be25987020f498ea0100a7fb9055c08b84f'
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$ cd HTMLCOIN
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$ ./autogen.sh
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'build-aux'.
libtoolize: copying file 'build-aux/ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'build-aux/m4'.
libtoolize: copying file 'build-aux/m4/libtool.m4'

...

  CC            = gcc
  CFLAGS        = -g -O2
  CPPFLAGS      =  -DQTUM_BUILD -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS
  CXX           = g++ -std=c++11
  CXXFLAGS      = -g -O2 -Wall -Wextra -Wformat -Wvla -Wformat-security -Wno-unused-parameter -Wno-unknown-pragmas
  LDFLAGS       =

lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$ make -j2
Making all in src
make[1]: Entering directory '/home/lucifer/HTMLCOIN/src'
make[2]: Entering directory '/home/lucifer/HTMLCOIN/src'
  CXX      libbitcoinconsensus_la-arith_uint256.lo
  CXX      libbitcoinconsensus_la-hash.lo
  CXX      libbitcoinconsensus_la-pubkey.lo
  CXX      libbitcoinconsensus_la-uint256.lo
  CXX      libbitcoinconsensus_la-utilstrencodings.lo
make[3]: Entering directory '/home/lucifer/HTMLCOIN/src/secp256k1'
gcc -I. -g -O2 -Wall -Wextra -Wno-unused-function -c src/gen_context.c -o gen_context.o
gcc gen_context.o -o gen_context
  CC       src/java/libsecp256k1_jni_la-org_bitcoin_NativeSecp256k1.lo
  CC       src/java/libsecp256k1_jni_la-org_bitcoin_Secp256k1Context.lo
./gen_context

...

Making all in doc/man
make[1]: Entering directory '/home/lucifer/HTMLCOIN/doc/man'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/home/lucifer/HTMLCOIN/doc/man'
make[1]: Entering directory '/home/lucifer/HTMLCOIN'
make[1]: Nothing to be done for 'all-am'.
make[1]: Leaving directory '/home/lucifer/HTMLCOIN'
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$









아래와 같이 오류가 나는경우


lucifer@1004lucifer:~/HTMLCOIN# ./autogen.sh
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'build-aux'.
libtoolize: copying file 'build-aux/ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'build-aux/m4'.
libtoolize: copying file 'build-aux/m4/libtool.m4'
libtoolize: copying file 'build-aux/m4/ltoptions.m4'
libtoolize: copying file 'build-aux/m4/ltsugar.m4'
...
configure.ac:22: installing 'build-aux/config.guess'
configure.ac:22: installing 'build-aux/config.sub'
configure.ac:32: installing 'build-aux/install-sh'
configure.ac:32: installing 'build-aux/missing'
Makefile.am:12: warning: user variable 'GZIP_ENV' defined here ...
/usr/share/automake-1.15/am/distdir.am: ... overrides Automake variable 'GZIP_ENV' defined here
src/Makefile.am: installing 'build-aux/depcomp'
src/Makefile.am:709: warning: user target '.mm.o' defined here ...
/usr/share/automake-1.15/am/depend2.am: ... overrides Automake target '.mm.o' defined here
parallel-tests: installing 'build-aux/test-driver'
lucifer@1004lucifer:~/HTMLCOIN#
lucifer@1004lucifer:~/HTMLCOIN#
lucifer@1004lucifer:~/HTMLCOIN#
lucifer@1004lucifer:~/HTMLCOIN# make -j2
make: *** No targets specified and no makefile found.  Stop.
lucifer@1004lucifer:~/HTMLCOIN#




아래와 같이 ./autogen.sh 명령어 대신 ./configure 명령어를 이용한다.


lucifer@1004lucifer:~/HTMLCOIN$ ./configure
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu

...

  CC            = gcc
  CFLAGS        = -g -O2
  CPPFLAGS      =  -DQTUM_BUILD -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS
  CXX           = g++ -std=c++11
  CXXFLAGS      = -g -O2 -Wall -Wextra -Wformat -Wvla -Wformat-security -Wno-unused-parameter -Wno-unknown-pragmas
  LDFLAGS       =
  
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$ make -j2
Making all in src
make[1]: Entering directory '/home/lucifer/HTMLCOIN/src'
make[2]: Entering directory '/home/lucifer/HTMLCOIN/src'
  CXX      libbitcoinconsensus_la-arith_uint256.lo
  CXX      libbitcoinconsensus_la-hash.lo

...

Making all in doc/man
make[1]: Entering directory '/home/lucifer/HTMLCOIN/doc/man'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/home/lucifer/HTMLCOIN/doc/man'
make[1]: Entering directory '/home/lucifer/HTMLCOIN'
make[1]: Nothing to be done for 'all-am'.
make[1]: Leaving directory '/home/lucifer/HTMLCOIN'
lucifer@1004lucifer:~/HTMLCOIN$











위의 방법으로 Ubuntu 에서 HTML Coin 설치가 되었으며 아래와 같이 HTML COIN Daemon 을 수행할 수 있다.
(백그라운드로 프로세스를 띄우며 접속한 창을 닫아도 프로그램이 종료되지 않게 했으며, 하단의 명령어는 데몬프로세스가 정상적으로 구동되었는지 확인하기 위해 수행했다.)


lucifer@1004lucifer:~/HTMLCOIN$ ./src/htmlcoind --daemon
HTMLCOIN server starting
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$ ./src/htmlcoin-cli getinfo
{
  "version": 2000004,
  "protocolversion": 70001,
  "walletversion": 130000,
  "balance": 5000.00000000,
  "stake": 0.00000000,
  "blocks": 75261,
  "timeoffset": -1,
  "connections": 10,
  "proxy": "",
  "difficulty": {
    "proof-of-work": 26.92585221801374,
    "proof-of-stake": 3594083914.235587
  },
  "testnet": false,
  "moneysupply": 79893078750,
  "keypoololdest": 1515584298,
  "keypoolsize": 98,
  "unlocked_until": 0,
  "paytxfee": 0.00000000,
  "relayfee": 0.00400000,
  "errors": ""
}
lucifer@1004lucifer:~/HTMLCOIN$







지갑파일의 위치는 아래와 같다.
(wallet.dat 파일을 내 지갑으로 덮어쓰기하면 내 지갑으로 사용이 가능하다.
Daemon 프로세스 종료 후 backup/restore 하는게 좋을 것 같다.)


lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$ cd ~
lucifer@1004lucifer:~$
lucifer@1004lucifer:~$ cd .htmlcoin/
lucifer@1004lucifer:~/.htmlcoin$
lucifer@1004lucifer:~/.htmlcoin$ ls -al
total 21680
drwxrwxr-x 6 lucifer lucifer     4096 Jan 12 00:50 .
drwxr-xr-x 9 lucifer lucifer     4096 Jan 11 23:37 ..
-rw------- 1 lucifer lucifer       37 Jan 11 22:08 banlist.dat
drwx------ 3 lucifer lucifer     4096 Jan 11 22:08 blocks
drwx------ 2 lucifer lucifer     4096 Jan 11 23:06 chainstate
-rw------- 1 lucifer lucifer       75 Jan 11 23:05 .cookie
drwx------ 2 lucifer lucifer     4096 Jan 11 23:05 database
-rw------- 1 lucifer lucifer        0 Jan 11 22:08 db.log
-rw------- 1 lucifer lucifer 21208136 Jan 12 00:58 debug.log
-rw------- 1 lucifer lucifer     7889 Jan 11 22:11 fee_estimates.dat
-rw------- 1 lucifer lucifer        4 Jan 11 23:05 htmlcoind.pid
-rw------- 1 lucifer lucifer        0 Jan 11 22:08 .lock
-rw------- 1 lucifer lucifer       17 Jan 11 22:11 mempool.dat
-rw------- 1 lucifer lucifer   835066 Jan 12 00:50 peers.dat
drwx------ 4 lucifer lucifer     4096 Jan 11 22:08 stateHTMLCOIN
-rw------- 1 lucifer lucifer     3059 Jan 11 23:14 vm.log
-rw-r--r-- 1 lucifer lucifer    98304 Jan 12 00:05 wallet.dat
lucifer@1004lucifer:~/.htmlcoin$








처음에 동기화가 안되는것 같아 아래와 같이 노드를 추가하여 빠르게 동기화를 해주었다.


lucifer@1004lucifer:~/HTMLCOIN$ ./src/htmlcoin-cli getwalletinfo
{
  "walletversion": 130000,
  "balance": 0.00000000,
  "stake": 0.00000000,
  "unconfirmed_balance": 0.00000000,
  "immature_balance": 0.00000000,
  "txcount": 4,
  "keypoololdest": 1515584298,
  "keypoolsize": 99,
  "unlocked_until": 0,
  "paytxfee": 0.00000000,
  "hdmasterkeyid": "51746e092f14d9a2812b078be4cb937a37b10f36"
}
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$ ./src/htmlcoin-cli addnode "73.7.238.46:4888" "add"
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$ ./src/htmlcoin-cli addnode "173.170.4.174:4888" "add"
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$
lucifer@1004lucifer:~/HTMLCOIN$ ./src/htmlcoin-cli getwalletinfo
{
  "walletversion": 130000,
  "balance": 3750.00000000,
  "stake": 0.00000000,
  "unconfirmed_balance": 0.00000000,
  "immature_balance": 1250.00000000,
  "txcount": 4,
  "keypoololdest": 1515584298,
  "keypoolsize": 99,
  "unlocked_until": 0,
  "paytxfee": 0.00000000,
  "hdmasterkeyid": "51746e092f14d9a2812b078be4cb937a37b10f36"
}
lucifer@1004lucifer:~/HTMLCOIN$








지갑이 동기화 되고 있는지 확인하는 방법은 아래의 링크에서 확인할 수 있다.
- Linux 에서 지갑 동기화(sync) 되었는지 여부 확인방법




참고
https://github.com/richardjoo/HTMLCOIN/blob/master/wallet/raspberry-pi3/how-to-install-htmlcoin-wallet-on-rpi3.md


2018년 1월 6일 토요일

[COIN][HTML] WALLET 동기화가 안되는 경우





========================================
2018.01.27 추가

https://github.com/HTMLCOIN/HTMLCOIN/releases

신규버전(2.0.0.4) 에서 버그가 수정되었다고 올라왔다.
굳이 힘들게 아래 방법을 사용할 필요 없이 최신 버전의 지갑을 사용하면 문제가 없다.



========================================



거노파파님의 HTMLCOIN 지갑 설치방법을 보고 지갑(WALLET)을 설치했는데 동기화가 되지 않아 알아보았다.

HTML COIN 코인 스테이킹 및 지갑 사용 방법 (STAKING, POS)
링크 - https://blog.naver.com/chowk17/221155842076



HTMLCOIN 지갑은 공식사이트에서 최신버전으로 설치를 했다.

HTMLCOIN Client ver: v2.0.0.2-beta




증상

설치 시 아래와 같은 화면이 나오면서 동기화가 되지 않았다.






해결방법

디버그창 => 콘솔 => addnode "45.55.234.194:4888" "add" 입력

(1분 이내에 동기화 시작되지 않을 시 아래 추가글 참고!!)
1004lucifer





잠시 기다리면 아래와 같이 모습이 변경된다.







잠시 시간을 기다리면 아래와 같이 동기화가 된 것을 확인할 수 있다.
1004lucifer


코인, COIN, HTMLCOIN, WALLET, 지갑, 동기화, transaction, 

참고
https://www.reddit.com/r/htmlcoin_community/comments/7obco6/issues_with_the_wallet/




========================================
2018.01.10 추가

콘솔에서 입력하는
addnode "45.55.234.194:4888" "add"
명령어는 다른 노드를 추가하는 명령어인데..

해당 노드(PC)가 살아있지 않으면 추가하더라도 동기화가 되지 않는 것을 확인했다.
살아있는 노드를 추가해야 하기에 현재 동기화가 되어있는 다른 PC의 지갑에서 다른 노드를 볼 수가 있다.





위에 적혀있는 노드를 가지고 다시한번 입력하니 몇초 지나지 않아 동기화가 시작되는 것을 확인하였다.