POPKET CHAIN Best of breed security! Rest Assured That Your Cryptocurrency Are Securely Stored In The World s Most Trusted Cryptocurrency Wallet We Provide You Full Control Back Up Your Funds And Protect You From Unauthorized Access 1
POPKET CHAIN 기술백서
POPKET 팝켓의목적은분산어플리케이션제작을위한대체프로토콜을만드는것이다. 대규모분산어플리케이션에유용할것이라생각되는다른종류의제작기법을제공하며, 빠른개발시간, 작고드물게사용되는어플리케이션을위한보안, 다른어플리케이션과의효율적인상호작용이중요한상황에특히주안점을두고있다. 팝켓는튜링완전언어를내장하고있는블록체인이라는필수적이고근본적인기반을제공함으로써이목적을이루고자한다. 누구든지이언어를사용해스마트컨트랙트, 분산어플리케이션을작성하고소유권에대한임의의규칙, 트랜잭션형식 (transaction format), 상태변환함수 (state transition function) 등을생성할수있다. 네임코인의기본적인형태는두줄정도의코드로작성할수있고, 통화나평판시스템관련프로토콜은스무줄내외의코드로만들수있다. 어떤값을저장하고, 특정한조건들을만족했을때만그값을얻을수있게하는일종의암호상자인스마트컨트랙트또한이플랫폼위에만들수있다. 이것은비트코인의스크립팅 (scripting) 이제공하는것보다훨씬강력한기능들이제공되기때문에가능한것으로, 튜링 - 완전 (Turing-completeness), 가치인지능력 (value-awareness), 블록체인인지능력 (blockchainawareness), 상태 (state) 개념등이포함된다. 3
POPKET ACCOUNT 팝켓에서, 상태 (state) 는어카운트 (account) 라고하는오브젝트 (object) 들로구성되어있다. 각각의어카운트는 20 바이트의주소와어카운트간값과정보를직접적으로전달해주는상태변환 (state transition) 을가지고있다. 팝켓어카운트는다음네개의필드를가지고있다. 논스 (nonce): 각트랜잭션이오직한번만처리되게하는일종의카운터어카운트의현재팝켓 (popket) 잔고어카운트의계약코드 ( 존재한다면 ) 어카운트의저장공간 ( 초기설정 (default) 상에서는비어있음 ) 팝켓의기본내부암호 - 연료 (crypto-fuel) 이고, 트랜잭션수수료를지불하는데사용된다. 보통두가지종류의어카운트가존재하는데, 프라이빗키에의해통제되는외부소유어카운트 (Externally Owned Accounts) 와컨트랙트코드에의해통제되는컨트랙트어카운트 (Contract Accounts) 가있다. 외부소유어카운트는아무런코드도가지고있지않으며, 이어카운트에서메시지를보내기위해서는새로운트랜잭션을하나만들고, 서명 (signing) 을해야한다. 컨트랙트어카운트는메시지를받을때마다, 자신의코드를활성화시키고, 이에따라메시지를읽거나내부저장공간에기록하고, 다른메시지들을보내거나, 컨트랙트들을차례로생성하게된다. 팝켓에서컨트랙트는, 수행되거나컴파일되어져야할어떤것이라기보다는, 팝켓의실행환경안에살아있는일종의자율에이전트 (autonomous agents) 로서, 메시지나트랜잭션이도착하면항상특정한코드를실행하고, 자신의팝켓잔고와, 영속적인변수들을추적하기위해자신의키 / 값저장소를직접적으로통제하는역할을한다. 6
POPKET MESSAGE/TRANSACTION 팝켓에서사용되는트랜잭션 (transaction) 이란용어는외부소유어카운트가보낼메시지를가지고있는서명된데이터패키지를말한다. 이트랜잭션은다음을포함하고있다. 메시지수신처 발신처를확인할수있는서명발신처가수신처로보내는팝켓의양선택적 (optional) 데이터필드 STARTGAS 값, 트랜잭션실행이수행되도록허용된최대계산단계수 GASPRICE 값, 매계산단계마다발신처가지불하는수수료 처음세항목은암호화폐에서는거의표준처럼사용되는값이다. 데이터필드는초기값으로설정된기능 (function) 은가지고있지않지만, 버추얼머신 (virtual machine) 은컨트랙트가이데이터에접근할때사용할수행코드 (opcode) 를가지고있다. 예를들어, 블록체인위에도메인등록서비스로기능하고있는컨트랙트가있을경우, 이컨트랙트로보내지는데이터는두개의필드를가지고있는것으로해석할수있다. 첫번째필드는등록하고자하는도메인이고, 두번째필드는 IP 주소이다. 컨트랙트는메시지데이터로부터이값들을읽어서저장소내적당한위치에저장한다. STARTGAS 와 GASPRICE 필드는팝켓의앤티 - 서비스거부 (anti-dos) 모델에있어서매우중요한역할을한다. 코드내의우연적이거나악의적인무한루프, 또는계산낭비를방지하기위해각각의트랜잭션은사용할수있는코드실행의계산단계수를제한하도록설정되어야한다. 계산의기본단위는 gas 이고보통, 계산단계는 1 gas 의비용이소요되나, 어떤연산은더비싼계산비용을치루거나, 상태의일부분으로저장되어야하는데이터의양이많을경우더많은수의 gas 비용이필요하게된다. 또한트랜잭션데이터에있는모든바이트는바이트당 5 gas 의수수료가든다. 이러한수수료시스템의의도는어떤공격자가계산, 밴드위스, 저장소등을포함해그들이소비하는모든리소스에비례하여강제로수수료를지불하게하는데있다. 따라서, 이런리소스중어떤것이라도상당량을소비하는네트웍과연관된트랜잭션은대략증가분에비례한 gas 수수료를가지고있어야한다. 컨트랙트는다른컨트랙트에게 메시지 를전달할수있다. 메시지는따로저장될필요가없는팝켓의실행환경에서만존재하는가상의오브젝트이다. 메시지는다음의것을포함하고있다. ( 암묵적으로 ) 메시지발신처, 메시지수신처, 메시지와함께전달되는팝켓, 선택적데이터필드, 어플리케이션 (Applications) 기본적으로, 팝켓를이용하여총세가지카테고리의어플리케이션을제작할수있다. 첫번째카테고리는돈과직접적으로연관된컨트랙트를계약참여자로하여금보다강력하게설정 - 관리하게끔하는금융어플리케이션이다. 이의예는하위화폐 (= 유로 / 달러등의상위화폐와환율이연동된화폐를지칭 ), 파생상품, 헷지컨트랙트, 예금용전자지갑, 유언장, 그리고최종적으로는전면적인고용계약수준의것들까지포함한다. 두번째카테고리는준 ( 準 ) 금융어플리케이션이다. 금전이관여되어있지만, 상당부분비 ( 非 ) 화폐적인면이존재하는계약을위한어플리케이션이이에해당된다. 이의좋은예로는어려운연산문제를푸는자에게자동적으로포상금이지급되는계약이다. 마지막으로, 온라인투표와분권형 ( 分權形 ) 거버넌스 (Governance) 와같이금융과관련성이아예없는어플리케이션이있다.
POPKET TOKEN SYSTEM 블록체인토큰시스템 (On-blockchain token system) 은미화 / 금등과연동된하위화폐, 주식과 스마트자산 * (Smart Property: 비트코인의블록체인상에서소유권이컨트롤 / 관리되는자산 ), " 위조불가능한 (secure unforgeable)" 쿠폰, 그리고통상적인가치와연결되어있지않은기타토큰시스템 ( 예, 인센티브부여를위한포인트제도 ) 등에이르기까지다양한형태의거래시스템을네트워크상에서구현하게끔해주는어플리케이션들을갖고있다. 팝켓에서토큰시스템은놀랍도록쉽게구현할수있다. 토큰시스템을이해하는데에핵심은아래와같다. 모든화폐혹은토큰시스템은근본은결국한가지오퍼레이션만을수행하는데이터베이스이다. A 라는주체로부터 X 단위의화폐 / 토큰을차감하고, 차감한 X 단위의화폐 / 토큰을 B 에게지급한다. 단, 거래전, A 는최소 X 단위를보유하고있었음 A 가이거래를승인함 팝켓에서유저는바로위의로직을컨트랙트에반영시키기만하면된다. Serpent 에서토큰시스템을실행하는기본적은코드는아래와같다 : def send(to, value): if self.storage[msg.sender] >= value: self.storage[msg.sender] = self.storage[msg.sender] - value self.storage[to] = self.storage[to] + value 이는기본적으로본백서에서설명한 은행시스템 의 " 상태변환함수 (state transition function)" 를아무런가공없이그대로적용시킨것이다. 통화의단위를정의하고배급하기위한최초작업을위해서, 또는더나아가여타컨트랙트들이계좌의잔금에대한정보요청을처리하기위한, 몇줄의코드가추가적으로더쓰여져야할수도있다. 하지만, 그정도가토큰시스템을만드는데필요한전부이다. 이론적으로, 팝켓에기반한하위화폐체계로서의토큰시스템은비트코인에기반한메타화폐 (= 비트코인블록체인연동된화폐 ) 가갖고있지않는중요한특성을지니고있을수있다 : 거래비용을거래시사용한화폐로직접지불할수있다는점이그것이다. 다음과같은과정을통하여이특성은발현될수있다 : 컨트랙트을집행하기위해서는발송인에게지불해야하는비용만큼의팝켓잔고를유지해야한다. 그리고컨트랙트집행시수수료로받는내부화폐 ( 하위화폐 ) 를 ( 상시돌아가고있는내부화폐 - 팝켓거래소에서 ) 즉각환전하여팝켓잔고로충전할수있다. 유저들은그렇게팝켓으로그들의계좌들을 활성화 시켜야하지만각컨트랙트를통해얻어지는만큼의금액을팝켓으로매번환전해주기에, 한번충전된팝켓은재사용이가능하다고볼수있다.
POPKET SCALABILITY( 확장성 ) 팝켓에대한한가지공통된의문점은확장성부분이다. 비트코인과마찬가지로팝켓도모든이체작업이네크워크상의전체노드에의해서일일이검증및작업이되어야한다는약점이있다. 비트코인의경우, 현재전체블록체인의크기가약 15GB 에이르며, 그크기는매시간 1MB 씩꾸준히늘어나고있다. VISA 의경우초당 2,000 여건의이체작업을처리하는데, 이는매 3 초당 1MB 씩의확장 ( 시간당 1GB, 매년 8TB) 을의미한다. 팝켓도비슷한문제를겪을것이고, 단순히화폐로서의역할만하는비트코인에비한다면, 온갖종류의탈중앙화된어플리케이션들 (Dapps: Decentralized applications) 을포괄하는팝켓은이부분에서훨씬더많은문제를겪을수도있을것이다. 하지만한가지다른점은, 팝켓은 전체블록체인히스토리 가아닌, 단지 상태정보 (the state) 만가지고있으면된다는점이다. 만일개개의모든노드가전체블록체인을보관해야한다면, 아래와같은문제가생길수있다. 블록체인의크기가점점커져 100TB 에육박하게되었다고생각해보자. 이정도수준으로보관해야하는블록체인의크기가커지면, 오직소수의사업가나기업형태의참여자만이이를감당할수있게된다. 다수의일반사용자들은 라이트 SPV(Simple Payment Verification) 노드만들사용하게될것이다. 이렇게되면, 전체블록체인의내역을가진소수의참여자들이결탁하여, 장부내역을수정하거나블록보상량을바꿔치기하는등의조작행위가일어날수있을것이다. 단순한 라이트노드 (light node) 로서는이러한조작을감지할방법이없다. 물론 전체블록체인를소유한노드 (full node) 중에서도선의의참가자가있을지모른다. 그러나다수의 완전노드 (full node) 가작심하여블록체인조작을시도한다면, 이를발견하는시점에서는이미늦었다고봐야할것이다. 실제로비트코인이현재이와비슷한문제에처할위험이있다고경고받고있으며, 해당문제를완화시키는방법에대하여는 Peter Todd 에의해논의된바있다. 위의문제를해결키위해, 가까운시일안에두가지의전략을추가로도입할예정이다. 첫번째로팝켓도기본적으로블록체인기술을바탕으로한채굴알고리즘을사용하고있기때문에, 모든채굴자들은 완전노드 (full node) 가되도록의무화될것이며, 이는필요한최소한의완전노드숫자를확보할수있도록해줄것이다. 두번째로, 이체내역검증작업이후블록체인에 중간상태트리루트 (an intermediate state tree root) 를도입하는것이다. 이렇게되면, 아무리블록생성작업이소수의노드에집중되더라도, 단하나의선의의노드 (honest node) 만존재한다면검증프로토콜 (verification protocol) 을통해이문제를해결할수있다. 만일어떠한채굴노드가전파한블록이검증오류 (invalid) 처리가되었다면, 해당블록의 구성 (format) 이맞지않거나 상태내역 S [ n ] 이틀린경우일것이다. S [ 0 ] 상태가옳은것으로간주되기때문에, S[ i-1 ] 이맞다면, S[ i ] 에오류가있는것이다. 검증작업에참여하는노드는, APPLY(S[i-1],TX[i]) -> S[i] 작업 (processing) 을하는 페트리샤트리노드의부분집합 (the subset of Patricia tree) 을통해 검증오류증명 (proof of invalidity) 과 인덱스 i 를제공한다.
노드들은, 위의노드들을이용해해당작업을수행하며, 생성한 S[ i ] 가제공받은 S[ i ] 와일치하지않음을발견하게된다. 또한 불완전한블록 (incomplete block) 을전파하려는악의의채굴노드들과관련된더욱정교한공격이이루어질수있다. 블록을검증하는데에필요한정보가온전히존재하지않을수도있다. 이경우, 질의 - 응답프로토콜 (challenge-response protocol) 기법이사용될수있다. 검증노드가 목표블록의인덱스형태 (target transaction indices) 로 질문 (challenge) 을생성하고, 노드를수신하는라이트노드 (light node) 는해당블록 (challenge) 을일단검증오류블록으로취급한다. 이후, 다른노드 ( 채굴노드이든검증노드이든 ) 가 페트리샤트리노드의부분집합 (the subset of Patricia tree) 을검증증명 (proof of validity) 으로써제공한다면, 그때서위의블록은검증된 ( 유효한 ) 것으로취급된다.
결론 팝켓프로토콜은본래매우범용적인프로그래밍언어를통해 블록체인상에스크로나인출한도설정, 금전계약, 도박시장등의고급기능 을제공하는, 가상화폐의업그레이드버전으로구상되었다. 팝켓프로토콜은이러한어플리케이션들을직접적으로제공하는것이아니라, 튜링완전언어 (Turingcomplete programming language) 를통해이론적으로거의모든형태의이체방식이나어플리케이션을만들어낼수있도록지원한다. 더욱흥미로운점은, 팝켓은단순한 화폐 의차원을훨씬뛰어넘는다는점이다. 분산저장공간 (DFS:decentralized file storage) 이나, 분산컴퓨팅, 분산예측시장 (decentralized prediction market) 프로토콜등은사실수많은응용개념들중일부에불과하다. 이러한새로운개념들은컴퓨팅산업의효율성을폭발적으로높일수있는잠재력이있으며, P2P 프로토콜에처음으로 경제적인차원 (economic layer) 을입힘으로써엄청난혁신을가져올수있을것이다. 마지막으로, 컴퓨팅이나금융과관련이없는분야들에서도다양한어플리케이션들이나올것이다. 팝켓프로토콜이제공하는 임의상태변환 (arbitrary state transition function) 이라는개념은고유의잠재력을지닌플랫폼을탄생시킨다. 기존의자료저장공간이나도박, 금융등의하나의목적에특화된폐쇠형구조 (close-ended) 와는달리, 팝켓자유롭게조정이가능한구조 (open-ended) 이다. 우리는이것이몇년이내에, 금융부문이든비금융부문이든엄청나게많은종류의서비스를설계할수있도록돕는것에특화된기반이될것이라고믿는다.