안녕하세요 마입니다. 크레딧코인 공식 사이트 채굴 매뉴얼을 읽고 채굴하는 데 어려움을 겪는 한국 분들이 많이 있는 것 같아 관련 채굴 가이드를 작성하였습니다. 스팀잇 글 65,280바이트 제한으로 한 번에 글이 업로드되지 않아 나눠서 작성하게 되었습니다.
크레딧 코인 블록체인에 연결해서 서버와 클라이언트를 운용할 수 있게 도와드리겠습니다.
크레딧코인 채굴 메뉴얼 ver 1.0 - [1] 메타마스크 비밀키, RPC 메인넷, SECP256K1, 도커
크레딧코인 채굴 메뉴얼 ver 1.0 - [2] 방화벽, 포트 포워딩, 채굴 관련 파일 설정 후 스냅샷 적용, 채굴, 서버, 클라이언트 파일 구동하기
크레딧코인 채굴 매뉴얼 ver 1.0 - [3] 문제 사항 발생 경우(503 문제)
크레딧코인 채굴 매뉴얼 ver 1.0 - [4] 채굴할 때 보관해야하는 키, 지금 캐고 있는 코인은?
크레딧 코인을 채굴하기 위해서는 아까 준비한 항목들이 필요합니다.
먼저 크레딧코인 파일 다운로드하기 왼쪽 링크에서 크레딧 코인을 다운로드해 줍니다. 그리고 난 뒤에 원하는 곳에 압축을 풀어줍니다. 같이 해봅시다.
\1. 위 링크를 눌러서 사이트에 접속합니다. 빨간색으로 동그라미 친 부분을 누릅니다.
\2. 누르면 나오는 창에서 빨간색으로 동그라미 친 부분을 누릅니다.
\3. 본인의 다운로드 파일 경로에 저장되었습니다. 폴더 열기(S)버튼을 눌러서 다운받아진 곳으로 가줍니다!
\4. 이 파일을 원하는 경로에 넣어줍니다. 저는 C 드라이브에 두는 것을 추천해 드립니다. (저는 Credit 폴더를 따로 만들어서 그 안에 넣어주었습니다.)
\5. 압축을 풀어줍니다.
이제 폴더 안에 들어가서 아래 2개의 파일의 내용을 바꿔줘야 합니다.
\1. creditcoin-with-gateway.yaml 파일을 오른쪽 클릭하고, 연결 프로그램을 눌러줍니다.
\2. 메모장을 누르고, 항상 이 앱을 사용하여 .yaml을 열기에 체크를 하고 확인을 눌러줍니다.
파일 수정하기에 앞서 앞으로 json, yaml 파일 수정할 때 수정하고 나서 < >
표시는 들어가면 안 됩니다!
{
"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 메인넷 노드 주소"를 넣으시면 됩니다.
https://mainnet.infura.io/v3/xxxxxxxxxxxx
) 또는 자체적으로 돌리고 있으신 메인넷 노드 주소 (예시. http://localhost:8545
)--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>"로만 끝나면 됩니다.)
\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
명령어를 입력하여 노드를 재시작합니다.
\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
를 입력하여 채굴해야 하는 상황
먼저 마이너 키를 얻어서 "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: ""
# 윈도우
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 기준으로 조회 안됨]
https://www.creditcoinexplorer.com/address-detail?address={sighash_here}
{sighash_here} 부분에{}는 지우고 본인 sighash값을 넣으면 확인 가능합니다.
404 error가 뜨면 본인이 캔 블록이 없거나, 블록체인 API에 채굴 기록된 것이 없기 때문입니다.
@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])
클라이언트 파일을 설정하기 위해서는 아래의 것들이 필요합니다.
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
)
0x
는 떼고 넣습니다.비트코인 섹션은 써도 되긴 하는데 비워놔도 무방합니다.
# 윈도우
docker-compose -f .\Client\creditcoin-client.yaml up -d
# 리눅스
docker-compose -f ./Client/creditcoin-client.yaml up -d
docker exec -it creditcoin-client bash
위의 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는 방해된 명령어 다시 구동하는 게 목적인 파일입니다. 잘못 입력된 명령어 재구동하는 상황을 막기 위해 제거해주는 것입니다.
이걸로 크레딧코인 채굴에 대한 설명이 끝났습니다. 도움이 되셨나요? 부디 어려움 없이 채굴을 완수하여 목적을 달성하시기를 기원합니다. 감사합니다.
글을 퍼가실 때는 출처를 반드시 명시해주시고 상업적 목적의 이용에 동의하지 않습니다.