일단 팩트런.... 이거 블럭을 발견했다는 것을 알려면 Explorer 대시보드에서 일일히 리프레시해서
봐야만 알수가 있습니다. 근데 문제는 그 블럭이 어떤 채굴기에서 발견되었는지 알려고 보니
난이도가 엄청 올라갑니다. 각 채굴기의 채굴화면에서 블럭이 발견되어 Nonce 값이 나오고
그것이 제출 단계(Submission) 까지 가는 상황을 일일히 눈으로 찾아내야 합니다.
또한 문제는 그것뿐만이 아닙니다. 보통 제출 단계까지 통과하기 전에 타인의 채굴기에서 먼저
제출했다는 것을 알게되면 그나마 Race was lost 라는 메시지를 통해 해당 Height의 블럭에서는
내가 실패했다는 것을 알수 있습니다. 근데 제출단계를 전부 통과했는데도 팩트런의 블럭체인
내에서 동시기에 제출된 다른 채굴기에게 순번을 밀려서 실패하면 그건 채굴기 쪽으로 어떤
메시지도 오지 않습니다. 그럼 그건 해당 블럭 Height 번호에 해당하는 Explorer 화면을 보고
Nonce 값을 내가 제출한 값과 비교해서 동일하지 않으면 내가 진거라는 식으로 또 수작업 확인
해야 합니다.
그래서 이런 답답함을 해결하고자 삽질을 했습니다.
일단 FACTOR.py 메인 채굴 프로그램을 수정했습니다.
블럭이 발견되어 Nonce 값이 나오면 일단 그것을 무조건 제가 지정한 로그파일로
블럭 발견 시간 , 발견한 채굴기의 호스트 네임, 블럭Height값, Nonce 값을 저장하도록 만들었습니다.
2023-07-16 17:25:56 / Fact0rn05 / H: 7xxxx / N: 18xxxxxxxxxxxxxxxxxxxxxxx
이런 식으로요.
그리고 나서 해당 블럭의 Height 값에 해당하는 Explorer 화면을 wget으로 가져옵니다.
예를 들어 위에 적은 Height 값이라면
wget https://factexplorer.io/7xxxx
이렇게 되죠. 그런다음 wget으로 가져온 내용속의 Nonce 값과 로그파일에 저장된 Nonce 값을
비교시킵니다. 그렇게 해서 두 값이 동일하면 파이썬으로 텔레그램봇을 이용해
2023-07-16 17:25:56 / Fact0rn05 / H: 7xxxx / N: 18xxxxxxxxxxxxxxxxxxxxxxx : Race Win
이라고 저한테 텔레그램으로 통보가 오도록 만들었습니다.
그럼 저는 위의 텔레그램 메시지를 보고 2023년 7월 16일 22시 41분 56초에 5번 채굴기에서
블럭이 발견되었고, 그게 최종적으로 블럭체인에도 반영되었다는 것을 알 수 있게되죠.
근데 먼저번 말했지만, 제출단계까지 진행되었는데도 블럭체인 내에서의 경합으로 타인의
채굴기에게 밀려버린 경우라면
2023-07-16 18:33:27 / Fact0rn03 / H: 7xxxx / N: 55xxxxxxxxxxxxxxxxxxxxx : Race Lost
라는 식으로 저에게 오는거죠.
덕분에 개인적인 답답함을 많이 해소한 것 같습니다. ( 어떤 채굴기에서 발견되었는지, 언제 발견되었는지등등 )
뭐.... 근데... 이렇게 바꿔 놓는 것이 솔직히 블럭발견 확률을 높여준다거나 그런건
하나도 아니라는거죠. 채굴수익에는 아무런 영향이 없다는거!! ㅋㅋㅋㅋㅋㅋ
그냥 개인적으로 답답함을 어떻게 해보자는 거였을뿐...
그외에 사소한 기능들도 꽤 많이 손봤습니다.
1. 각 채굴기에서 팩트런 채굴프로그램이 정상동작여부를 텔레그램으로 1시간에 한번씩 보내줍니다.
2. 각 채굴기에서 팩트런 채굴프로그램이 정상동작여부를 감지해서 꺼져있으면 자동으로
실행후 그것을 텔레그램으로 통보해줍니다. ( 이게 뭔가의 이유로 블럭 연산이 900초인가를 초과하면
채굴 프로그램 자체가 종료되더군요. )
3. 모든 채굴기에 대해 채굴돌리는 지갑의 스크립트키 / 노드IP 주소를 지정을 일괄로 바꿀수 있습니다.
4. 각 채굴기에는 그래픽카드가 1개는 필요하니까 구형 RX580을 장착해놨는데, 이것도 그냥 놀리기
아까우니까 질리카만 돌리려고 생각했습니다. 근데 RX 계열에서 가장 해시가 잘 나오는 Teamredminer 에서
질리카 싱글 마이닝을 지원하지 않아요. 그래서 별도의 스크립트를 통해 질리카 세션이 열릴때만
동작하도록 만들어뒀습니다.
제 팩트런 채굴기들의 최종 화면
아무튼 채굴 자체보다 이런 잡다한 기능 추가한다고 삽질하다가 파이썬 프로그래밍
응용능력이 쪼금더 올라가고, 리눅스 쉘스크립트에서 안써봤던 기능들 더 써본 느낌이네요.
근데 채굴로 수익이 나느냐는 둘째치고 이런게( 안되는거 되게 만드는거 ) 더 재밌는것
같습니다.
ps. 매번 느끼지만, 컴퓨터간 통신을 위해 따로 소켓프로그래밍을 하기 싫을 때,
(라기보다는 굳이 따로 소켓프로그램을 만들어야할 정도로 규모가 크지 않다거나
단시간에 만들고자 할때 ) 역시 netcat 명령어는 킹왕짱입니다.. 물론 그만큼
위험한 명령어이기도 하지만 ㅋㅋㅋㅋㅋ netcat 으로도 왠만한 것은 다 구현할 수
있습니다.
저와는 접근 방향이 많이 다르네요.
저의 경우는 채굴 성능과 항상성쪽으로 접근했습니다.
쉘스크립트에서 프로세스가 죽지 않도록 하는것, 이미 블럭 찾았는데 yafu로 뻘 짓하지 못하게 하는것등.