크레딧코인(CTC) 채굴 매뉴얼 ver 1.0 - [2] 방화벽, 포트포워딩, 채굴 관련 파일 설정 후 스냅샷 적용, 채굴, 서버, 클라이언트 파일 구동하기
크레딧코인 채굴 매뉴얼 ver 1.0
안녕하세요 마입니다. 크레딧코인 공식 사이트 채굴 매뉴얼을 읽고 채굴하는 데 어려움을 겪는 한국 분들이 많이 있는 것 같아 관련 채굴 가이드를 작성하였습니다. 스팀잇 글 65,280바이트 제한으로 한 번에 글이 업로드되지 않아 나눠서 작성하게 되었습니다.
크레딧 코인 블록체인에 연결해서 서버와 클라이언트를 운용할 수 있게 도와드리겠습니다.
크레딧코인 채굴 메뉴얼 ver 1.0 - [1] 메타마스크 비밀키, RPC 메인넷, SECP256K1, 도커
크레딧코인 채굴 메뉴얼 ver 1.0 - [2] 방화벽, 포트 포워딩, 채굴 관련 파일 설정 후 스냅샷 적용, 채굴, 서버, 클라이언트 파일 구동하기
크레딧코인 채굴 매뉴얼 ver 1.0 - [3] 문제 사항 발생 경우(503 문제)
크레딧코인 채굴 매뉴얼 ver 1.0 - [4] 채굴할 때 보관해야하는 키, 지금 캐고 있는 코인은?
크레딧 코인 채굴하기
크레딧 코인을 채굴하기 위해서는 아까 준비한 항목들이 필요합니다.
- 이더리움 프라이빗 키
- 이더리움 RPC 메인넷 노드
- 256 bit SECP256K1 ECDSA 키
- 본인의 퍼블릭 ip (눌러보시면 확인할 수 있습니다!)
먼저 크레딧코인 파일 다운로드하기 왼쪽 링크에서 크레딧 코인을 다운로드해 줍니다. 그리고 난 뒤에 원하는 곳에 압축을 풀어줍니다. 같이 해봅시다.
크레딧코인 파일 다운로드하기
\1. 위 링크를 눌러서 사이트에 접속합니다. 빨간색으로 동그라미 친 부분을 누릅니다.
\2. 누르면 나오는 창에서 빨간색으로 동그라미 친 부분을 누릅니다.
\3. 본인의 다운로드 파일 경로에 저장되었습니다. 폴더 열기(S)버튼을 눌러서 다운받아진 곳으로 가줍니다!
\4. 이 파일을 원하는 경로에 넣어줍니다. 저는 C 드라이브에 두는 것을 추천해 드립니다. (저는 Credit 폴더를 따로 만들어서 그 안에 넣어주었습니다.)
\5. 압축을 풀어줍니다.
이제 폴더 안에 들어가서 아래 2개의 파일의 내용을 바꿔줘야 합니다.
- Server/gatewayConfig.json
- Server/creditcoin-with-gateway.yaml
수정 방법
\1. creditcoin-with-gateway.yaml 파일을 오른쪽 클릭하고, 연결 프로그램을 눌러줍니다.
\2. 메모장을 누르고, 항상 이 앱을 사용하여 .yaml을 열기에 체크를 하고 확인을 눌러줍니다.
파일 수정하기에 앞서 앞으로 json, yaml 파일 수정할 때 수정하고 나서 < >
표시는 들어가면 안 됩니다!
Server/gatewayConfig.json 파일 수정하기
{
"bindIP": "0.0.0.0",
"bitcoin": {
"rpc": "<bitcoin_rpc_node_url>",
"credential": "<rpc_username:rpc_password>"
},
"ethereum": {
"creditcoinContract": "0xa3ee21c306a700e682abcdfe9baa6a08f3820419",
"creditcoinContractAbi": "[{'constant':false,'inputs':[{'name':'tokenHolders','type':'address[]'},{'name':'amounts','type':'uint256[]'}],'name':'recordSales730Days','outputs':[],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':true,'inputs':[],'name':'VestingStartDate','outputs':[{'name':'','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':true,'inputs':[],'name':'name','outputs':[{'name':'','type':'string'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':false,'inputs':[{'name':'spender','type':'address'},{'name':'value','type':'uint256'}],'name':'approve','outputs':[{'name':'success','type':'bool'}],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':true,'inputs':[{'name':'tokenHolder','type':'address'}],'name':'vestedBalanceOf','outputs':[{'name':'balance','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':true,'inputs':[],'name':'totalSupply','outputs':[{'name':'amount','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':true,'inputs':[{'name':'tokenHolder','type':'address'}],'name':'purchasedBalanceOf365Days','outputs':[{'name':'balance','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':false,'inputs':[{'name':'value','type':'uint256'},{'name':'sighash','type':'string'}],'name':'exchange','outputs':[{'name':'success','type':'bool'}],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':false,'inputs':[{'name':'from','type':'address'},{'name':'to','type':'address'},{'name':'value','type':'uint256'}],'name':'transferFrom','outputs':[{'name':'success','type':'bool'}],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':true,'inputs':[{'name':'tokenHolder','type':'address'}],'name':'vestedBalanceOf183Days','outputs':[{'name':'balance','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':true,'inputs':[],'name':'decimals','outputs':[{'name':'','type':'uint8'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':false,'inputs':[{'name':'tokenHolders','type':'address[]'},{'name':'amounts','type':'uint256[]'}],'name':'recordSales1095Days','outputs':[],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':true,'inputs':[{'name':'tokenHolder','type':'address'}],'name':'vestedBalanceOf365Days','outputs':[{'name':'balance','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':false,'inputs':[{'name':'value','type':'uint256'}],'name':'burn','outputs':[{'name':'success','type':'bool'}],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':true,'inputs':[{'name':'tokenHolder','type':'address'}],'name':'purchasedBalanceOf2190Days','outputs':[{'name':'balance','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':false,'inputs':[{'name':'tokenHolders','type':'address[]'},{'name':'amounts','type':'uint256[]'}],'name':'recordSales183Days','outputs':[],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':false,'inputs':[{'name':'tokenHolder','type':'address'},{'name':'numCoins','type':'uint256'}],'name':'recordSale365Days','outputs':[],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':true,'inputs':[{'name':'tokenHolder','type':'address'}],'name':'vestedBalanceOf730Days','outputs':[{'name':'balance','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':true,'inputs':[{'name':'tokenHolder','type':'address'}],'name':'purchasedBalanceOf','outputs':[{'name':'balance','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':true,'inputs':[{'name':'owner','type':'address'}],'name':'balanceOf','outputs':[{'name':'balance','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':false,'inputs':[],'name':'finalizeSales','outputs':[],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':false,'inputs':[{'name':'from','type':'address'},{'name':'value','type':'uint256'}],'name':'burnFrom','outputs':[{'name':'success','type':'bool'}],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':true,'inputs':[{'name':'tokenHolder','type':'address'}],'name':'vestedBalanceOf2190Days','outputs':[{'name':'balance','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':true,'inputs':[{'name':'tokenHolder','type':'address'}],'name':'purchasedBalanceOf730Days','outputs':[{'name':'balance','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':true,'inputs':[],'name':'symbol','outputs':[{'name':'','type':'string'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':false,'inputs':[{'name':'tokenHolder','type':'address'},{'name':'numCoins','type':'uint256'}],'name':'recordSale183Days','outputs':[],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':false,'inputs':[{'name':'to','type':'address'},{'name':'value','type':'uint256'}],'name':'transfer','outputs':[{'name':'success','type':'bool'}],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':true,'inputs':[],'name':'creditcoinSalesLimit','outputs':[{'name':'','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':true,'inputs':[{'name':'tokenHolder','type':'address'}],'name':'vestedBalanceOf1095Days','outputs':[{'name':'balance','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':true,'inputs':[],'name':'creditcoinLimitInFrac','outputs':[{'name':'','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':false,'inputs':[{'name':'tokenHolder','type':'address'},{'name':'numCoins','type':'uint256'}],'name':'recordSale2190Days','outputs':[],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':false,'inputs':[{'name':'tokenHolder','type':'address'},{'name':'numCoins','type':'uint256'}],'name':'recordSale730Days','outputs':[],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':true,'inputs':[{'name':'tokenHolder','type':'address'}],'name':'purchasedBalanceOf1095Days','outputs':[{'name':'balance','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':true,'inputs':[{'name':'owner','type':'address'},{'name':'spender','type':'address'}],'name':'allowance','outputs':[{'name':'remaining','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':false,'inputs':[],'name':'startVesting','outputs':[],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':false,'inputs':[{'name':'tokenHolders','type':'address[]'},{'name':'amounts','type':'uint256[]'}],'name':'recordSales2190Days','outputs':[],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':true,'inputs':[{'name':'tokenHolder','type':'address'}],'name':'purchasedBalanceOf183Days','outputs':[{'name':'balance','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':true,'inputs':[],'name':'IsSalesFinalized','outputs':[{'name':'','type':'bool'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':false,'inputs':[{'name':'tokenHolders','type':'address[]'},{'name':'amounts','type':'uint256[]'}],'name':'recordSales365Days','outputs':[],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':false,'inputs':[{'name':'tokenHolder','type':'address'},{'name':'numCoins','type':'uint256'}],'name':'recordSale1095Days','outputs':[],'payable':false,'stateMutability':'nonpayable','type':'function'},{'inputs':[{'name':'creditcoinFoundation','type':'address'},{'name':'devCost','type':'address'}],'payable':false,'stateMutability':'nonpayable','type':'constructor'},{'payable':true,'stateMutability':'payable','type':'fallback'},{'anonymous':false,'inputs':[{'indexed':true,'name':'from','type':'address'},{'indexed':false,'name':'value','type':'uint256'},{'indexed':true,'name':'sighash','type':'string'}],'name':'Exchange','type':'event'},{'anonymous':false,'inputs':[{'indexed':true,'name':'from','type':'address'},{'indexed':false,'name':'value','type':'uint256'}],'name':'Burnt','type':'event'},{'anonymous':false,'inputs':[{'indexed':true,'name':'from','type':'address'},{'indexed':true,'name':'to','type':'address'},{'indexed':false,'name':'value','type':'uint256'}],'name':'Transfer','type':'event'},{'anonymous':false,'inputs':[{'indexed':true,'name':'owner','type':'address'},{'indexed':true,'name':'spender','type':'address'},{'indexed':false,'name':'value','type':'uint256'}],'name':'Approval','type':'event'}]",
"rpc": "<ethereum_node_url>"
},
"ethless" : {
"rpc": "<ethereum_node_url>"
},
"erc20": {
"rpc": "<ethereum_node_url>"
}
}
이제 각각 파트에서 아래와 같이 되어있는 부분을 바꿔야 합니다.
<> 꺾쇠가 사용되어있는 부분을 바꿔주시면 됩니다.
아래에서 RPC 메인넷 노드에 들어가는 주소는 위에서 "직접 만드신 infura 메인넷 노드 주소"를 넣으시면 됩니다.
- rpc: RPC 메인넷 노드 (예시.
https://mainnet.infura.io/v3/xxxxxxxxxxxx
****) 또는 자체적으로 돌리고 있으신 메인넷 노드 주소 (예시.http://localhost:8545
)
Server/creditcoin-with-gateway.yaml 파일 수정하기
--endpoint tcp://<insert.your.ip>:8800 \
\1. 51번째, 61번째 줄에 있는 <insert.your.ip>
부분을 "본인의 Public IP"로 바꿔주세요! 나의 Public IP 확인하기 수정하고 나서 < >
표시는 들어가면 안 됩니다!
예시 : --endpoint tcp://13.93.178.197:8800 \
\2. 다른 사람들이 본인 노드에 접근을 허용하게 하기 위해 포트를 개방해야 합니다. (예시: 8800번 포트) 아래의 링크를 참조해주세요!
방화벽에서 포트를 열고, 공유기에서 포트 포워딩 하는 방법
하지만 위의 포트 여는 방법이 영어로 돼 있음으로 한글로 설명해드리겠습니다.
포트 포워딩 하는 방법
\1. 윈도우 왼쪽 아래에서 "돋보기 모양 버튼"을 누르고 "cmd"를 입력하고 엔터를 칩니다.
\2. 나온 명령 프롬프트에 "ipconfig"를 입력하고 엔터를 칩니다.
\3. 위 그림에 나온 "기본 게이트웨이" 항목에 있는 "192.168.1.1"과 같은 숫자를 (본인 창에 떠있는 숫자) 인터넷 주소창에 입력합니다.
\4. 공유기 설정하는 곳에 접속할 수 있습니다.(각자 공유기마다 인터페이스가 다릅니다!!!)
\5. "관리 도구"에 들어가서
\6. "포트 포워드 설정"에 들어가 줍니다.
\7. 그림과 같이 설정하여...
\8. 그림과 같이 설정될 수 있도록 하나씩 다 해줍니다. (사실 8800번 포트만 개방 되도 채굴이 된다고 합니다.)
방화벽에서 포트 여는 방법
\1. 윈도우 왼쪽 아래에서 "돋보기 모양 버튼"을 누르고 "고급 보안이 포함된 Windows Defender 방화벽"을 검색해서 눌러줍니다.
\2. "인바운드 규칙" 버튼을 누릅니다.
\3. "새 규칙..." 버튼을 누릅니다.
\4. "포트(O)"에 체크 후 다음(N)
\5. "특정 로컬 포트(S)"에 8800 입력 후 다음(N)
\6. "연결 허용(A)"에 체크 후 다음(N)
\7. "도메인(D), 개인(P), 공용(U)" 전부 체크 후 다음(N)
\8. 이름에 "Credit 8800" 입력 후 마침(F)
크레딧 코인 블록체인에 연결하기
이제 도커 설치하고, 설정 완료했으면, 크레딧 코인 블록체인에 연결할 시간입니다.
윈도우에서 명령 프롬프트 여는 방법
\1. 윈도우 왼쪽 아래에서 "돋보기 모양 버튼"을 누르고 "Power Shell"을 검색한 뒤, 오른쪽 클릭해서 "관리자 권한으로 실행" 버튼을 눌러줍니다.
\2. 본인이 위에서 저장한 아래 그림에 있는 폴더의 안으로 이동해줍니다.
\3. Power Shell에서 이동하는 방법은 "cd"라는 명령어를 사용하시면 됩니다.
Change Directory의 줄임말로써
cd ~
라고 치면 ~ 경로로 이동합니다.cd ..
라고 치면 이전 경로로 이동합니다.(이전 폴더로 이동)cd(스페이스 바)
한 뒤 "tab" 키를 누르면 누를 때마다 해당 폴더 안에 있는 것들을 차례대로 탐색해줍니다.
\4. 아까 C 드라이브 바로 밑에 압축을 푸신 분들은
cd 'C:\CreditcoinDocs-Mainnet-master\'
라고 입력하시면 바로 해당 경로로 이동할 수 있습니다.
저는 C 드라이브의 Credit 폴더 안에 CreditcoinDocs-Mainnet-master 폴더가 있으므로 아래와 같이 입력해주었습니다.
\5. 위 그림처럼 C:\~~~\ CreditcoinDocs-Mainnet-master>
되어있으면 끝!
(저와 경로가 똑같지 않아도 됩니다! 마지막에 아까 압축 푼 경로인 "CreditcoinDocs-Mainnet-master>"로만 끝나면 됩니다.)
맥 OS X에서 명령 프롬프트 여는 방법
\1. cmd + spacebar
를 쳐서 터미널을 열거나 터미널을 검색해줍니다.
\2. 윈도우에서와 마찬가지로 아까 압축 푼 폴더로 찾아가서 해당 경로에 맞춰줍니다!
스냅샷 적용하기
채굴을 시작하기에 앞서, 1번 블록부터 차례대로 검증하면 컴퓨터에 부하도 많이 가고, 시간도 오래 걸릴 것입니다. 그런 상황을 방지하기 위해서 "이미 검증이 완료된 블록을 찍어둔 스냅샷"을 활용합니다.
글 맨 윗부분에 다운로드받으라고 해둔 해당 파일 "creditcoin-block-volume.tar.gz"로 스냅샷을 적용하겠습니다.
만약 받지 않으셨다면, 이 링크로 가셔서 아래 그림의 동그라미 친 부분을 눌러서 받으시면 됩니다.
여기서부터는 리눅스, 윈도우, 맥 각자 적용 방법이 다르기 때문에 각각 설명해드리겠습니다.
리눅스
\0. sudo docker-compose -f ./Server/creditcoin-default.yaml up
명령어로 노드를 작동시킵니다.
\1. sudo docker-compose -f ./Server/creditcoin-default.yaml down
명령어로 노드를 정지시킵니다.
\2. Download blockchain snapshot 를 눌러서 파일을 다운로드받은 후 creditcoin-block-volume.tar.gz
파일을 /
경로에 놓습니다.
\3. 지금 있는 블록체인 파일을 sudo bash -c "rm /var/lib/docker/volumes/server_validator-block-volume/_data/*"
명령어를 이용하여 제거합니다.
\4. sudo tar xzvf /creditcoin-block-volume.tar.gz -C /var/lib/docker/volumes/server_validator-block-volume/
명령어로 스냅샷 압축을 풀어줍니다.
\5.sudo docker-compose -f ~/Server/creditcoin-default.yaml up
명령어를 쳐서 노드를 다시 시작합니다.
윈도우
\0. Download blockchain snapshot 링크를 눌러서 파일을 다운로드받고 "C 드라이브 temp 폴더" 아래에 해당 파일을 둡니다. (예시. C:\temp\creditcoin-blockchain-volume.tar.gz
)
\1. 위에서 알려드린 방법으로 PowerShell을 켜고, CreditcoinDocs-Mainnet-master있는 폴더로 찾아갑니다. > docker-compose -f .\Server\creditcoin-default.yaml up
명령어를 쳐서 크레딧 코드 노드를 가동시킵니다.
\2. 그리고 > docker-compose -f .\Server\creditcoin-default.yaml down
명령어를 쳐서 크레딧 코드 노드를 중단시킵니다.
\3. 파워셸을 하나 더 켜고 마찬가지로 같은 폴더로 가서 > docker run -it -v /:/host ubuntu /bin/sh
명령어를 입력합니다. # 표시가 뜨면 잘 된겁니다.
\4. > docker container ls
명령어를 쳐서 **"recursing_lamport" **같은 이름의 NAMES를 얻습니다. 저의 경우에는 hopeful_darwin이네요.
\5. > docker cp "C:\temp\creditcoin-block-volume.tar.gz" (4번 스텝에서 나온 이름):/
명령어를 쳐서 아까 받은 스냅샷을 컨테이너 안에 복사합니다. ()소괄호는 빼고 치시면 됩니다.
\6. 아까 > docker run -it -v /:/host ubuntu /bin/sh
명령어를 입력해서 #이 떠 있는 파워셸 창을 켜줍니다.
\7. $ sudo tar xzvf /creditcoin-block-volume.tar.gz --directory /host/var/lib/docker/volumes/server_validator-block-volume/
명령어를 입력해줍니다. sudo가 없습니다. 라고 나온다면 sudo를 빼고 $ tar xzvf /creditcoin-block-volume.tar.gz --directory /host/var/lib/docker/volumes/server_validator-block-volume/`를 입력해주면 됩니다.
$표시는 빼고 넣으셔야합니다.
\8. 위 그림에 나온 것처럼 항목이 다 뜨면 완료된 것입니다. 7번 작업이 완료되면 > docker-compose -f .\Server\creditcoin-default.yaml up
명령어를 입력하여 노드를 재시작합니다.
Mac OS X
\0. Download blockchain snapshot 에서 스냅샷을 다운로드해서 예시의 위치에 파일을 위치시킵니다. (예시. /home/user/creditcoin-blockchain-volume.tar.gz
)
\1. > docker-compose -f .\Server\creditcoin-default.yaml up
명령어를 입력하여 노드를 가동시킵니다.
\2. > docker-compose -f .\Server\creditcoin-default.yaml down
명령어를 입력하여 노드를 정지시킵니다.
\3. 새로운 터미널을 열고 > docker run -it -v /:/host ubuntu /bin/sh
명령어를 입력합니다.
\4. 다른 터미널에서 > docker container ls
를 입력하여 컨테이너 이름을 얻습니다. (윈도우 항목 참조)
\5. $ docker cp "/home/user/creditcoin-blockchain-volume.tar.gz" (4번 스텝에서 나온 이름):/
명령어를 쳐서 파일을 컨테이너로 복사합니다.(윈도우 항목 참조)
\6. 3번 명령을 실행한 터미널로 가서 $ sudo tar xzvf /creditcoin-block-volume.tar.gz --directory /host/var/lib/docker/volumes/validator_validator-block-volume/
명령어를 입력합니다. sudo가 먹히지 않는다면 빼고 나머지를 입력합니다. (윈도우 항목 참조)
\7. > docker-compose -f .\Server\creditcoin-default.yaml up
명령어를 입력하여 크레딧 코인 도커 컨테이너를 다시 시작합니다.
크레딧 코인 클라이언트, 서버 최신버전 업데이트
\0. Powershell을 켜고, CreditcoinDocs-Mainnet-master 폴더가 있는 곳으로 이동해줍니다.
\1. 아래 명령어를 입력하여 클라이언트, 서버를 꺼줍니다.
윈도우 의 경우
$ docker-compose -f .\Server\creditcoin-default.yaml down
$ docker-compose -f .\Server\creditcoin-with-gateway.yaml down
$ docker-compose -f .\Client\creditcoin-client.yaml down
리눅스 의 경우
$ docker-compose -f ./Server/creditcoin-default.yaml down
$ docker-compose -f ./Server/creditcoin-with-gateway.yaml down
$ docker-compose -f ./Client/creditcoin-client.yaml down
\2. 아래 명령어를 입력해줍니다.
윈도우 의 경우
$ docker-compose -f .\Server\creditcoin-default.yaml pull
$ docker-compose -f .\Server\creditcoin-with-gateway.yaml pull
$ docker-compose -f .\Client\creditcoin-client.yaml pull
리눅스 의 경우
$ docker-compose -f ./Server/creditcoin-default.yaml pull
$ docker-compose -f ./Server/creditcoin-with-gateway.yaml pull
$ docker-compose -f ./Client/creditcoin-client.yaml pull
\3. 이제 켜서 쓰시면 됩니다.
윈도우 의 경우
$ docker-compose -f .\Server\creditcoin-default.yaml up
$ docker-compose -f .\Server\creditcoin-with-gateway.yaml up
$ docker-compose -f .\Client\creditcoin-client.yaml up
리눅스 의 경우
$ docker-compose -f ./Server/creditcoin-default.yaml up
$ docker-compose -f ./Server/creditcoin-with-gateway.yaml up
$ docker-compose -f ./Client/creditcoin-client.yaml up
크레딧 코인 채굴 시작하기(서버 구동하기)
위의 경로 C:\~~~\ CreditcoinDocs-Mainnet-master>
에서 명령어를 입력해주면 됩니다.
(회색 바탕에 있는 명령어는 그대로 복사-붙여넣기해서 사용하셔도 됩니다!)
윈도우의 경우
docker-compose -f .\Server\creditcoin-with-gateway.yaml up
리눅스의 경우
docker-compose -f ./Server/creditcoin-with-gateway.yaml up
위 명령어를 입력하면 구동이 시작되어, 아래 메시지가 나올 것입니다.
sawtooth-validator | [2020-01-01 11:22:33.444 DEBUG permission_verifier] Chain head is not set yet. Permit all.
sawtooth-validator | [2020-01-01 11:22:33.444 DEBUG completer] Request missing predecessor
나올 수 있는 화면들 예시
정상 채굴
정상 채굴
정상채굴
피어(동료)를 찾지 못하는 상황, "Ctrl+C" 버튼을 누르고 다시
# 윈도우
docker-compose -f .\Server\creditcoin-with-gateway.yaml up
# 리눅스
docker-compose -f ./Server/creditcoin-with-gateway.yaml up
를 입력하여 채굴해야 하는 상황
마이너 sighash 알아내고 잔고 보는 방법
먼저 마이너 키를 얻어서 "CreditcoinDocs-Mainnet-master\Client" 폴더 안의 clientConfig.json
를 수정해야합니다.
*마이너 키 얻기*
- 위의 크레딧 코인 채굴 시작하기(서버 구동하기)를 참고하여 서버를 구동합니다.
# 윈도우
docker-compose -f .\Server\creditcoin-with-gateway.yaml up
# 리눅스
docker-compose -f ./Server/creditcoin-with-gateway.yaml up
PowerShell 창에 메시지가 엄청 많이 뜨면서 포화상태이기 때문에 PowerShell을 관리자 권한으로 하나 더 켜줍니다.
아래 명령어를 쳐주면 키와 Success라는 메시지가 나옵니다.
docker exec sawtooth-validator-default cat /etc/sawtooth/keys/validator.priv
위에 출력된 키를 복사합니다.
CreditcoinDocs-Mainnet-master\Client/clientConfig.json 파일을 엽니다.
signer
값에 아까 복사한 키 값을 붙여넣습니다.creditcoinRestApiURL
는 다음과 같이 해둡니다.
creditcoinRestApiURL: ""
****sighash 값 얻고 지갑 잔고 보기\ + 클라이언트 구동시키기****
- 아래 명령어를 쳐서 Client를 구동시킵니다.:
# 윈도우
docker-compose -f .\Client\creditcoin-client.yaml up -d
# 리눅스
docker-compose -f ./Client/creditcoin-client.yaml up -d
docker exec -it creditcoin-client bash
명령어를 치면 #이 나옵니다. 잘 하신 겁니다.sighash를 얻기 위해서는
./ccclient sighash
명령어를 치시면 sighash값과 함께 Success메시지가 나옵니다.잔고 확인을 위해서는
./ccclient show Balance 0
명령어를 치시면 됩니다.[2020.07.16 기준으로 조회 안됨]
크레딧 코인 익스플로러에서 본인이 캔 블록 확인하기[2020.07.16 기준으로 조회 안됨]
https://www.creditcoinexplorer.com/address-detail?address={sighash_here}
{sighash_here} 부분에{}는 지우고 본인 sighash값을 넣으면 확인 가능합니다.
404 error가 뜨면 본인이 캔 블록이 없거나, 블록체인 API에 채굴 기록된 것이 없기 때문입니다.
크레딧 코인 익스플로러에서 캔 물량을 확인할 수 없을 때 확인 방법(@espins 정보 제공)
@espins : 다음은 본인이 채굴한 블록ID를 쉽게 알아내는 방법 중 하나 입니다.
\ 1. validator bash 쉘 오픈
docker exec -it sawtooth-validator-default bash
\ 2. Public 키 조회(여기서 출력되는 항목을 3번에 넣으면 됩니다.
cat /etc/sawtooth/keys/validator.pub
\ 3. Public 키를 사용하여 블록ID 검색 (grep 뒤 '' 사이에 Public 키 입력)
sawtooth block list --url http://rest-api:8008 | grep '2번항목에서 나온 문자'
\ 4. 확인이 끝났으면 Ctrl+C 키로 빠져나오시면 됩니다.
크레딧 코인 채굴 정지
아래 명령어를 입력하시면 됩니다.
# 윈도우
docker-compose -f .\Server\creditcoin-with-gateway.yaml down
# 리눅스
docker-compose -f ./Server/creditcoin-with-gateway.yaml down
블록이 성공적으로 채굴되었을 경우
채굴에 성공하면 아래와 같은 메시지가 나옵니다.
sawtooth-validator | [2020-01-01 12:34:56.789 INFO publisher] Claimed Block: [block id] (block_num:[block number], state:[state id], previous_block_id:[previous block id])
크레딧 코인 클라이언트
크레딧 코인 클라이언트 파일 설정
클라이언트 파일을 설정하기 위해서는 아래의 것들이 필요합니다.
- 이더리움 프라이빗 키(비밀 키)
- 이더리움 RPC 메인넷 노드
- 256 bit SECP256K1 ECDSA key
- 먼저 크레딧 코인 파일 다운로드에서 파일을 받습니다. 위에 채굴 과정하셨으면 이미 파일 있으신 겁니다.
- 원하는 곳에 압축 풀고 폴더를 두신 뒤 아래 파일부터 차례대로 수정하겠습니다.
Client/clientConfig.json
위에서 메모장으로 켠 것과 마찬가지로 json파일을 여시면 됩니다.
{
"signer": "<256_bit_key_secp256k1_ECDSA>",
"creditcoinRestApiURL": "",
"ethereum": {
"creditcoinContract": "0xa3ee21c306a700e682abcdfe9baa6a08f3820419",
"creditcoinContractAbi": "<creditcoinContractAbi",
"rpc": "<ethereum_node_url>",
"secret": "<ethereum_private_key_no_0x>",
"gasPriceInGwei": "<set_to_override_gas_price>"
},
"ethless" : {
"rpc": "<ethereum_node_url>"
},
"erc20": {
"rpc": "<ethereum_node_url>"
},
"bitcoin": {
"secret": "<bitcoin_private_key>",
"rpc": "<bitcoin_rpc_node_url>",
"credential": "<rpc_username:rpc_password>",
"fee": "10000"
},
}
다음 요소들을 고치면 됩니다.
signer: 본인 거 256 bit SECP256K1 ECDSA key
ethereum/ethless/erc20:
- rpc: 본인 거 RPC 메인넷 노드 (예시.
https://mainnet.infura.io/v3/xxxxxxxxxxxx
****) infura꺼 쓰거나 본인이 자체적으로 돌리는 RPC 메인넷 노드 (e.g.http://localhost:8545
) - secret: 본인 이더리움 프라이빗 키(비밀 키), 단 앞에 붙은
0x
는 떼고 넣습니다.
- rpc: 본인 거 RPC 메인넷 노드 (예시.
비트코인 섹션은 써도 되긴 하는데 비워놔도 무방합니다.
크레딧 코인 클라이언트 구동하기
- 아래 명령어로 클라이언트를 구동합니다.
# 윈도우
docker-compose -f .\Client\creditcoin-client.yaml up -d
# 리눅스
docker-compose -f ./Client/creditcoin-client.yaml up -d
- 클라이언트 sighash를 얻기 위해 다음 명령어를 입력합니다.
docker exec -it creditcoin-client bash
*클라이언트 sighash 얻기*
위의 2번 항목의 명령어를 입력해서 #이 떠 있는 상태에서 ./ccclient sighash
를 입력하면 sighash를 얻을 수 있습니다.
크레딧 코인 클라이언트 정지하기
다음 명령어를 입력하시면 됩니다.
# 윈도우
docker-compose -f .\Client\creditcoin-client.yaml down
# 리눅스
docker-compose -f ./Client/creditcoin-client.yaml down
문제해결
잘못된 명령에서 복구하기
때때로 크레딧 코인 클라이언트가 명령어를 잘못 쳐서 먹통이 될 때가 있는데 이걸 복구하려면 rm plugins/progress.txt
를 치고 다시 명령어를 입력하면 됩니다.
progress.txt는 방해된 명령어 다시 구동하는 게 목적인 파일입니다. 잘못 입력된 명령어 재구동하는 상황을 막기 위해 제거해주는 것입니다.
이걸로 크레딧코인 채굴에 대한 설명이 끝났습니다. 도움이 되셨나요? 부디 어려움 없이 채굴을 완수하여 목적을 달성하시기를 기원합니다. 감사합니다.
채굴 되었을 때 모습
- 본인 sighash : a2c33402f6946bff6470ef63751cf8b00236134060251d5a86e4933267da
글을 퍼가실 때는 출처를 반드시 명시해주시고 상업적 목적의 이용에 동의하지 않습니다.
sawtooth-validator가 CPU 점유율만 잡아먹고 별다른 로그가 작성되지 않는 경우가 있습니다.
Second run
[2020-07-22 16:57:24.171 WARNING cli] Network key pair is not configured, Network communications between validators will not be authenticated or encrypted.
이 경우 다음 명령어를 사용하면 로그 확인이 가능합니다.
docker exec sawtooth-validator-default tail -f /var/log/sawtooth/validator-debug.log
@espins 님 감사합니다. 관련 내용 추가하겠습니다
1.5.0버전 업되면서 정상화됐네요. 고생하셨습니다
크레딧 코인 팀이 고생했죠 ㅎㅎ
마님 오랜만입니다. 덕분에 채굴 하고있는데 아직은 잘모르겠네요.. 글 중간에
secret: 본인 이더리움 프라이빗 키(비밀 키), 단 앞에 붙은 0x 는 떼고 넣습니다.
이부분에 0x는떼고 넣는다고했는데, 비밀키에는 0x가 없지않나요? 이부분에 이더 주소를 넣어야되나요?
그리고 ./ccclient sighash 로 나온 값을 익스플로에서 검색을해도 안되던데, 익스에서 검색법이 어떻게되나요?
안녕하세요 @amis5818님. 개인키는 hex값이어서 원래 앞에 0x가 붙습니다 그런데 metamask에서 개인 키 내보내기를 했을 때 제공되는 양식은 prefix 0x가 떼어져있는 상태로 줍니다. 즉, metamask에 나온 개인키 넣으시면 됩니다.
그리고 sighash로 나온 값을 익스플로러에 검색해도 나오지 않는 문제점은 sawtooth rest api로 ./ccclient balance 0을 했을 때 api쪽에 문제가 있는지 조회가 되지 않는 현상이 있는데 그것 때문에 블록 히스토리에는 나오지만 잔고는 찍히지 않는 현상이 있는 것 같습니다. 블록 히스토리에는 기록되고 있으므로 채굴하셔도 무방할 듯합니다.
안녕하세요 . 궁금해서 댓글 남깁니다. 지웠다가 다시 반복해도 계속 이런글이 뜨네요 어떻게 해야 할까요?
안녕하세요 @mirrcrow1님
docker-compose -f .\server\creditcoin-default yaml down
이라는 명령어는 도커를 up시킨 상태에서 다시 끄는 명령어입니다.제가 매뉴얼에 up부분을 먼저 적지 않고 down부터 적어서 생긴 오류인 듯합니다.
docker-compose -f .\server\creditcoin-default yaml up
하신 후다시
docker-compose -f .\server\creditcoin-default yaml down
해보시면 될듯합니다.안녕하세요? 좋은 포스팅 잘 보고 따라해봅니다.
서버 구동 중 다음과 같이 503 에러가 발생하는데 조언 부탁드립니다
sawtooth-validator-default | [2020-07-20 14:02:45.086 DEBUG client_handlers] Unable to get chain head from block store
creditcoin-processor | 503
안녕하세요 @minju85 님
지금 서버 안정화 문제로 저도 3가지 상황이 반복되며 채굴이 진행되고 있지 않습니다.
503에러가 뜰 때는 스냅샷을 새로 받아서 적용하시면 개선되는 경우가 있습니다. 근데 지금은 서버 안정화 진행 중인듯 합니다. 기다려보시면 해결될 듯합니다.
@maa님 안녕하세요~ 설정을 다 해보고 sawtooth버젼을 변경해도 503에러가 뜨네요~! github파일 5일전 내용을 반영해도 똑같습니다 ㅜㅠ (리눅스 환경에서 돌리고있고요!) 설치 관련 공개되어있는 내용들은 다 확인해봤는데 알수가없네요~ ㅜㅠ
안녕하세요 @snackplus 님
위 댓글과 마찬가지로 지금 서버 안정화 문제로 저도 3가지 상황이 반복되며 채굴이 진행되고 있지 않습니다.
503에러가 뜰 때는 스냅샷을 새로 받아서 적용하시면 개선되는 경우가 있습니다. 근데 지금은 서버 안정화 진행 중인듯 합니다. 기다려보시면 해결될 듯합니다.
다행히 돌아가기는 하는 것 같아요!(감사합니다.)
claim 로그가 나와서 블록은 생성되는 것 같은데 확인할 방법이 없네요~ 블록 히스토리에서 확인하는 방법이 있나요? (https://www.creditcoinexplorer.com/blocks <-이사이트에서 블록아이디나 지갑주소로 검색해도 안나오네요~) 감사합니다.!
현재는 손으로 직접 찾는 노가다밖에 방법이 없습니다
와 @maa 님이시다 ㅎㅎ
반가워요 @yoon님 오랜만이네요 ㅎㅎ
스냅샷을 적용한 후 채굴을 시작하면 위 사진처럼 노란선 아래 부분의 로그가 앞 숫자만 커지고 무한 반복되고 'fork~~' 줄이 없어서 정상 채굴은 아닌거같네요.
그리고 공식 홈페이지 설명처럼 스냅샷 적용없이 바로 docker-compose -f .\Server\creditcoin-with-gateway.yaml up 명령할 때는 'creditcoin-processor | 503' 만 반복되네요.
방화벽을 아예 끄고 공유기 없이 직결로 해도 그러는걸 봐서 원인을 모르겠네요...
안녕하세요 @jinsu5님
저의 도커 대시보드 모습입니다. sawtooth-setting-tp-default에서 버전이 hyperledger/sawtooth-setting-tp:1.2이고
저의 경우 아래의 sawtoth-rest-api-default 버전이 hyperledger/sawtooh-rest-api:1.2입니다.
이걸 제외하고는 다 같은 것 같은데 sawtooth 버전을 최신화 시켜보시겠어요?
죄송한데 ㅜㅜ sawtooth 버전 최신화 어떻게 시키는지 알려주실수있나요?
저는
C:\Credit\CreditcoinDocs-Mainnet-master\Server\creditcoin-with-gateway.yaml
파일에서저 부분을 저렇게 바꿨습니다.
maa님 안녕하세요 :)
Miner Key가 업데이트 할 때 변경되기도 하나요?
docker exec sawtooth-validator-default cat /etc/sawtooth/keys/validator.priv
명령어 입력하였을 때 마이너 키가 바뀌는 경우가 생기는데 그럼 sighash도 같이 변해서.. 무시하고 예전 Miner Key를 사용해도 괜찮나요? 아니면 새로 받은 Miner Key를 써야만하나요?
@hwadonglee 님 안녕하세요?
저는 따로 변경된 사례가 없습니다. 아마 외부IP 변경이라던지 기타 변수 변동사항으로 인한 것으로 추측됩니다.
기존 채굴 물량이 있으신 곳에서 하시는게 편하실 것 같습니다.
저도 채굴이 잘안될때 도커 지웠다 다시 했더니 마이너키값이 변경되서 해시값도 변했있었는데,
이거 무시하고 전에 하던 마이너키값넣고 계속 돌렸었는데 방금해보니까. 예전에 채굴된 마이너 값을 넣어도 채굴은 새로바낀 해시주소로 채굴이 되네요.
현재 크레딧코인 익스플로러에서 sighash로 채굴 여부를 알 수 없는 경우가 있습니다.
매뉴얼대로 sighash를 크레딧코인 익스플로러에서 조회해 보면 아무것도 나타나지 않는데요.
show Balance 0 명령이 제대로 동작하지 않는 것과 관련이 있는 듯 합니다.
따라서 본인이 채굴한 블록ID를 알아내기가 쉽지 않을 수 있습니다.
다음은 본인이 채굴한 블록ID를 쉽게 알아내는 방법 중 하나 입니다.
고수 분들은 이미 알고 있을 수 있지만, 혹시 몰라서 공유해 드립니다.
혹시 더 쉬운 방법이 있다면 공유 부탁드립니다 ㅠㅠ
docker exec -it sawtooth-validator-default bash
cat /etc/sawtooth/keys/validator.pub
sawtooth block list --url http://rest-api:8008 | grep '021b993060e47.....'
3번째 명령어를 사용하면 채굴에 성공한 블록ID들이 나열됩니다.
확인이 끝났으면 Ctrl+C 키로 빠져나오시면 됩니다.
크레딧코인 익스플로러에서 블록 반영이 늦는 경우가 있습니다.
하지만 sawtooth block list 에서 자신의 블록이 발견되었다면 일단 기다려보세요.
시간이 필요할 수 있지만 결국 반영될 것입니다...
@espins님 감사합니다. 모르고 있던 것이었는데 알게 되었습니다. 관련 내용 메뉴얼에 첨부하겠습니다.