while(1) work();
반응형

지난 글을 쓰고 나서, 댓글을 천천히 살펴보니 어렵다는 의견이 너무 많더라구요 ㅠㅠ

쉽게 설명한다고 했는데 좀 어려운 내용이 많긴 했지요.

제 설명이 부족한 탓입니다 ㅜㅜ


사실 글로 써보고 싶었던 내용은 많습니다만, 연재를 서둘러 종료해야하나 생각도 듭니다.

비트코인이라는 단어만 보면 무조건 거품부터 물고 보는 사람들이 생각보다 많네요.


우선, 2편에서 설명드렸던 부분들을 간략하게 짚고 나서, 실제 실습(?)을 하실 수 있도록 도와드리고자 합니다.



[11] 지난 내용(1편, 2편) 정리

1. 비트코인은 블록체인(블록들간의 결합) 기술을 사용한다.

2. 블록에는 거래 장부들이 올라가있다.

3. 채굴자들은 계산 노가다를 통해 새로운 블록을 만든다.

4. 사용자들은 지갑을 손쉽게 가질 수 있다.

5. 내 지갑에서 비트코인을 빼서 다른 지갑으로 보내는걸 (혹은 반대) 거래(transaction)라고 한다

6. 거래대기열에 있는 거래가 채굴자에 의해 채택되어 블록에 기록되면, confirmed transaction (승인된 거래)이라고 한다.

7. 최초 승인 이후 블록이 생겨날때마다 승인 횟수는 증가한다.

8. 승인 횟수는 일반적으로 3 이상, 엄격하게는 6 이상이 되어야 안전성을 보장받을 수 있다.


나름 길게 쓴것 같은데 8줄로 요약이 가능하네요 (허탈)




[12] 테스트넷이란?

우선 실습에 앞서서, 테스트넷에 대해서 설명드리고자 합니다.

비트코인을 직접 구매해서 이런저런 테스트에 사용할 수도 있지만, 호기심을 충족시키기 위해 너무 많은 비용이 들어서는 안되겠죠 ^^

그래서 만들어진 것이 테스트넷입니다.


비트코인 네트워크와 동일한(비슷한) 네트워크를 하나 더 구축해두고 테스트 용도로 사용하는 곳입니다.

비트코인 메인넷과는 완전히 분리된 독립된 블록체인이 하나 더 존재한다고 생각하시면 되겠습니다.


즉 테스트넷의 비트코인은 아무런 "가치"가 없습니다.

메인넷의 비트코인은 사는 사람이 있기 때문에 가치가 평가되어 매매가 이루어지지만, 테스트넷같은 경우에는 사는 사람이 없어서요. (경제학에서는 수요가 0이면 가격이 0이 되지요?)




[13] 테스트넷 지갑 만들기

우선 지갑을 만들어봅시다!


테스트넷도 메인넷과 마찬가지로 다양한 방법으로 지갑을 만들 수 있지만 가장 간편한 방식인 온라인 지갑이 많이 사용됩니다.

해킹을 당해도 별 의미가 없으니깐요. (하는사람도 없겠지만...)


https://testnet.blockchain.info/


btc7.PNG


테스트넷 블록체인을 열람할 수 있고, 지갑도 만들어 볼 수 있는 사이트입니다.

메인넷과의 햇갈림을 방지하기 위해 붉은 띠가 둘러져 있네요.


우측 상단 GET A FREE WALLET 버튼을 누르면 지갑을 만들기 위한 가입 과정이 나타납니다.


btc8.PNG


회원가입 또는 로그인을 완료하시면 곧바로 지갑이 만들어진 것을 확인할 수 있습니다.

로그인 하면 나오는 화면에서, 받기 버튼을 누르시면 지갑 주소가 나타납니다.

테스트넷의 지갑 주소는 m n 또는 2로 시작한다는 사실! 메인넷과 햇갈리면 큰일이니깐요 ^^


당연한 말이지만, 두 블록체인은 서로 분리되어 있기 때문에 메인넷의 비트코인을 저 주소로 전송하게되면....

비트코인이 사라집니다! (메인넷의 지갑 주소는 1 또는 3으로 시작합니다.)


btc9.PNG



[14] 테스트넷 비트코인 무료로 받기

자 이제 제가 여러분들께 비트코인을 무료로 나누어드릴껍니다.

무려 1 비트코인을 드리겠습니다. 단, 테스트넷에서요 ^^


농담이구요, 제가 드리는건 아닙니다. 

테스트넷의 비트코인을 잔뜩 모아두었다가 사람들에게 나누어주는 서비스를 Faucet 이라고 합니다.

Faucet 서비스로부터 비트코인을 받아볼까요?


제가 애용하는 Faucet 사이트입니다.

https://testnet.manu.backend.hamburg/faucet


접속해보시면, 지갑 주소를 입력하는 공간이 있고 Give me some coins 라는 버튼이 보입니다.

여러분들의 지갑 주소를 입력하시고 버튼을 눌러볼까요?


btc10.PNG


이제 새로운 블록이 채굴되면서 거래가 승인되기를 기다려야 합니다.

테스트넷의 경우 3번까지 승인이 이루어지지 않아도 그냥 받아주는 경우가 많으니, 한 블럭만 채굴되길 기다리면 되겠죠? ^^


마침 최근에 채굴된 블록을 보니( https://testnet.blockchain.info/ko/ ) 마지막으로 채굴된 블록이 14분 전에 채굴되었음을 알 수 있네요.

이제 곧 새로운 블록이 나올 가능성이 크다는 의미이겠지요?


특히 테스트넷의 경우 메인넷에 비해 거래대기열에 올라와있는 거래 수가 훨씬 적기 때문에 대부분 바로 블록에 기록됩니다.


btc11.PNG


기다린지 어언 5분이 지나자 새로운 블록이 채굴되었네요.

테스트넷은 블록이 채굴된지 20분이 지나면 난이도를 최하로 낮춘다고 합니다.

그래서 20분 이상 블록이 지연되는 경우가 없습니다.


btc12.PNG

(새로 생성된 블록)


btc13.PNG


지갑에 1.1BTC가 들어와 있으니 뿌듯하네요.

진짜 이게 15600불의 가치를 가진다면 얼마나 좋을까요? ^^






[15] 테스트넷 비트코인 돌려주기

Faucet에서 얻은 테스트넷 비트코인은, 테스트가 끝나면 돌려주는것이 관례입니다.

비트코인을 받는 실습도 해봤겠다, 이번엔 보내는 실습도 한번 해 볼까요?


우리가 사용한 Faucet 서비스의 환불 지갑은 2N8hwP1WmJrFF5QWABn38y63uYLhnJYJYTF 입니다.

보내기 버튼을 사용해서 비트코인을 다시 보내줍시다.


btc14.PNG


그런데 안타깝게도, 글을 쓰는 시점에서는 사이트 오류인지, 보내는 창이 정상적으로 나오지 않네요.

보내기 버튼을 누른 다음부터는 사진으로 보여드리기가 힘들 것 같습니다.


어쨋든, 저기서 주의깊게 봐야할 것은 거래 수수료 항목입니다.

거래 수수료를 앞서 말씀드린바와 같이 보내는 사람이 자율적으로 정할 수 있다는 점을 확인하시면 되겠습니다.


어쩌피 테스트넷이니깐 수수료를 0으로 보내더라도 거래가 잘 이루어지지만, 우선 그냥 Regular로 하고 보내줍시다.


비트코인 전송 역시 한 블록이 채굴되어 승인이 나는 과정은 위와 동일합니다.





[16] 해쉬 함수(hash function)

자, 이제 3편의 본 주제입니다.

비트코인은 암호화 함수를 잘 짬뽕해놓은 산출물이라고 해도 과언이 아닐 정도로 비트코인에는 정말 많은 암호화 함수가 사용됩니다.

해쉬함수는 암호화 함수의 한 종류입니다.


우선, 함수라는 단어에 벌써부터 머리가 아프실 분들께 사죄를 표합니다.ㅋㅋ



함수는 "무언갈 넣으면 무언가가 나온다" 라는 역할을 하는 아이입니다.

위 사진에서 나타난 function h는 사과를 반으로 자르는 역할을 하는 함수가 되겠지요.


해쉬 함수도 마찬가지입니다. 무언가를 넣으면 무언가가 나옵니다.

더 정확히는, "문자열"을 넣으면 "해쉬"가 나옵니다.


btc15.PNG


btc16.PNG



SHA-256은 비트코인에서 사용하는 해쉬 함수의 이름입니다. (해쉬 함수에도 종류가 많이 있거든요.)

SHA-256은 아래와 같은 특징을 가집니다.


* 입력이 조금만 달라져도, 출력은 완전 딴판이 된다. (위 사진 두 장 참고)

* 입력값에서 출력값을 계산하긴 쉽다.

* 출력값에서 입력값을 알아내는것은 불가능하다.

* 출력값의 길이는 일정(256비트)하다.


즉 hello world가 "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9" 이라는 것을 알아내긴 쉽지만

"c81cdbcc1844f5c0ac379095c05f0fd146ebeef72662cb070aa38c3d35868cfa" 만 보고 아~ hello worlb구나~ 라는걸 알아내는것은 불가능하다는 의미입니다.


이해가 좀 되시나요?

SHA-256을 사용해서 직접 암호화 해보고 싶으시다면 http://www.xorbin.com/tools/sha256-hash-calculator 에서 가능합니다.




[17] SHA-256과 채굴

지금까지는 채굴이라는 작업을 "노가다" 로 추상화시켜서 대충 설명해드렸습니다.

그 이유는 해쉬 함수를 먼저 설명드려야 채굴 과정을 자세히 설명드릴 수 있기 때문이였습니다.


채굴을 쉽게 설명하면 다음과 같습니다.

"블록을 SHA256으로 암호화 했을 때 해쉬값 앞에 0이 20개 오도록 만들어라!"


이해가 가시나요?

앞선 글에서, 채굴은 블록을 만들기 위한 과정이라고 했고, 채굴자는 블록에 거래들을 기록시킨다고 했었습니다.

이렇게 기록된 블록과 채굴자가 마음대로 조절할 수 있는 값(시간, 넌스값, 채굴자코멘트, 대기열에서 선택한 거래) 들을 무한히 조절해가면서

블록을 암호화한 결과가 000000000000xxxxxxxxxxxxxxxxxxxxxxx (해쉬 앞에 0이 연속으로 오도록) 가 되도록 조절하는 것입니다.


0이 앞에 몇개 와야하는지는 난이도에 따라 달라집니다.


채굴의 난이도는 평균 채굴시간이 10분이 되도록 조정된다고 앞서 설명드렸습니다.

만약 최근 2016개 블록의 평균 채굴시간이 10분보다 길어진다면, 지금의 난이도가 너무 높은 상태이기 때문에 난이도를 낮춰주고

최근 2016개 블록의 평균 시간이 10분보다 짧아지면, 난이도를 높여줍니다.


이때의 난이도가 의미하는 것이 해쉬 결과 앞에 오는 0의 갯수입니다.


이게 얼마나 힘든 일인지는 직접 sha256 암호화를 시도해보시면 알 수 있습니다.

무작위로 숫자를 입력하시고 앞에 0이 5개 연달아서 오는 hash를 찾아보세요. 한시간동안 찾으셔도 못찾으실꺼라 확신합니다.


btc17.PNG


현재 난이도에 따르면 저정도의 0이 앞에 와야 채굴로 인정이 됩니다.

지금 수십 수백만대의 채굴 컴퓨터들이 셀 수 없을 정도의 연산을 하면서 찾아내고자 하는 결과물이 "0이 앞에 많이 오는 해쉬" 입니다. 허무하지요? 그래도 그 보상은 달달합니다 ㅋ 12.5BTC면 2억 가까운 돈이니깐요. 거기에 거래 수수료가 1~2BTC정도 되니.... 일년에 한개만 캐도... (전기세는 논외로...ㅎ)




[18] 마무리

글이 길다는 댓글이 있어서 이제부터는 글 말미에 요약본을 실어볼까 합니다.


1. 비트코인은 메인 네트워크 말고도 테스트를 위한 테스트넷이 존재한다.

2. 해쉬 함수는 문자열을 넣으면 해쉬가 나오는 함수이며, 몇 가지의 특징을 가진다.

3. 채굴은, 0이 앞에 많이 오는 해쉬 를 찾기 위한 과정이다.


이렇게 세 줄 요약이 가능하겠네요.


이해가 안되신다면 질문을, 잘못된 점이 있다면 지적과 비판을 부탁드립니다.

추천은 더더욱 환영하고 감사합니다.


지난 글에서 비판을 환영한다고 남겼더니 비트코인의 가치에 대한 비판이나 비난을 하시는 분들이 계시네요.

가치가 있건 없건 전 거기에 관심을 가지고 있지 않습니다. 이 글도 그런 주제와는 맞지 않고요.

따라서 앞서도 말씀드렸다 싶이 비트코인의 가치에 대해선 더 이상 논하지 않겠습니다.


또한, 죄송하지만 펌은 지양해주셨으면 좋겠습니다. 링크만 가져가주시면 감사하겠습니다 ^^~


맛있는 저녁 드시고, 하루만 더 지나면 곧 주말이네요. 힘내세요! 화이팅!

반응형
profile

while(1) work();

@유호건

❤️댓글은 언제나 힘이 됩니다❤️ 궁금한 점이나 잘못된 내용이 있다면 댓글로 남겨주세요.

검색 태그