POW 채굴은 도대체 무슨 연산을 그렇게 열심히 하는 것일까?steemCreated with Sketch.

in #coinkorea7 years ago (edited)

2018년 1월 15일, 23:38, in Korea

안녕하세요.^^

이번 글은 POW 채굴의 연산에 대해서 글을 적어 보겠습니다.

비트코인, 이더리움, 제트캐쉬, 비트코인 캐쉬 등 POW 방식을 사용하는 블록체인들은 연산을 해야 한다고 알고 있을 것입니다.
그 연산을 하기 위해서 수많은 CPU, GPU, FPGA, ASIC 이라는 연산 장치들을 투입하고 있다는 것도 들어보셨을겁니다.
전문적인 채굴 사업을 하는 곳은 수십억~ 수백억원 어치의 장치를 활용하여 연산 한다고 합니다.

도대체 무슨 연산을 하길래 저렇게 많은 컴퓨팅 파워가 필요한 것일까요..?

POW 채굴은 해쉬함수라는 것을 사용합니다.
해쉬함수란, 임의의 길이의 데이터를 입력하면 고정된 길이의 값을 출력합니다.

예를 들어, 4자로 출력하는 해쉬 함수가 있다고 했을 때,
"ZZZ"를 해쉬 함수에 입력하면 "0000" 이라는 4자로 출력 됩니다.
(예시 이므로, "ZZZ"를 넣어 "0000"을 출력하는 해쉬 함수가 있다고 가정한 것입니다.)
"AAAAAAAAA"를 입력하면 "0008"이라는 4자로 출력 됩니다.
"BB"를 입력하면 "0200"이라는 4자로 출력 됩니다.
"ZZZ"를 다시 입력하면 "0000"이라는 4자로 출력됩니다. 위의 "ZZZ"와 동일한 입력을 넣었기 때문에, 출력은 "0000"으로 동일합니다.

이처럼 해쉬함수는 길이에 상관없이 어떠한 입력 데이터를 넣으면, 고정된 길이의 값으로 출력해줍니다.
위의 예에서, "ZZZ"를 입력하면 "0000"이 나온다는 것을 보았습니다.
그런데!! 출력이 "0000"이 나오게 하는 입력을 찾는다는 것은 아주아주아주 어렵습니다.
왜냐하면, 해쉬 함수는 입력된 데이터를 기반으로 거의 완벽한 Random 알고리즘에 기인하여 출력을 냅니다.

즉, 입력에 대하여 출력을 낼 수는 있지만, 출력을 통하여 입력을 알아내는 것은 거의 불가능에 가깝도록 설계된 것이 해쉬 함수의 강력한 기능입니다.

다시 말해, 해쉬함수는, 입력을 통해 출력을 얻는 것은 쉽게 가능하지만, 출력을 통해 입력을 알아내는 것은 아주 어렵습니다.

자 이제! POW 채굴의 연산이 어떤 것인지 설명 드리겠습니다.

블록체인 시스템은 채굴을 위하여 문제를 내주는데요, 간단히 말하면 이런식의 문제 입니다.
문제 : 입력의 길이는 3개이다. "0000"의 출력을 내는 입력값을 찾아라!
이 입력값을 찾는 방법은,
1. "AAA"를 해쉬 함수에 넣어보고 출력이 "0000"과 일치한가? 아니오
2. "AAB"를 해쉬 함수에 넣어보고 출력이 "0000"과 일치한가? 아니오
3. "AAC"를 해쉬 함수에 넣어보고 출력이 "0000"과 일치한가? 아니오
...
n. "ZZZ"를 해쉬 함수에 넣어보고 출력이 "0000"과 일치한가? 예 -> 문제를 풀었습니다.!!

이런식으로 입력을 일일이 변경해가며 해쉬함수에 넣었을때 원하는 출력이 나올때까지 엄청난 노가다를 하는 것입니다.

저는 예로 설명하기 위해 입력을 3개 출력을 4개로 했지만, 실제로는 입력의 수가 수십~수백bit, 출력이 256bit+-수백bit 정도 됩니다. 따라서 이런 문제를 맞출 확률은 매우매우 낮습니다.
(이 확률을 조정하기 위하여 난이도라는 개념이 도입되었는데요, 이것은 다음에 설명 드릴게요~)

이런 문제를 빨리 풀기 위해서는, 많은 연산 장치를 두고 입력값의 영역을 나누어 주는 것이죠.
예를들면, 연산장치1은 입력을 AAA부터 BBB이전까지 풀고, 연상장치2는 입력을 BBB부터 CCC이전까지 풀고, 연산장치3은 CCC부터 DDD까지 풀어줘~
이런 식으로 남들보다 빨리 문제를 풀어 코인을 얻고자 수많은 연산 장치를 두는 것입니다.

이런 노가다(?)가 POW 채굴 방식에서 수행하는 연산입니다...

개인적으로, 크게 의미도 없고 단순 노가다 연산을 수행해야 하는 POW 방식을 그닥 좋아하지 않습니다..
(POW가 나쁘다는 것이 아니라, 개인적인 저의 생각일 뿐입니다.^^)

오늘은 여기까지~~!

Sort:  

Congratulations @parosai! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!

어느 이더리움 지갑을 사용할 것인가 새창
암호화폐를 처음 접하면 어떤 지갑을 사용해야할지 조금 당황스러울 정도로 여러가지 옵션들이 많습니다.이더리움의 경우에 사용 용도에 따라 어떤 지갑을 고르면 좋을지 정리를 해보았습니다.다른 코인과는 달리 이더리움은 단순한 지불수단용 암호화폐의 기능에 국한되지 않습니다. 이더리움을 바탕으로 그 위에 여러가지 탈중앙화된 어플리케이션(dapp)을 돌릴 수 있고, 많은 dapp 들은 독자적인 토큰을 사용합니다. 이 때문에 이더리움 지갑은 다른 코인들을 위한 단순 지불용 지갑과는 다른 기능이 필요합니다. dapp 토큰을 인식하고, 스마트 컨트랙…