Plasma EVM · 2020-03-03 · 3 Plasma EVM 핐핬핡핳항핡핅핖핍t ˙ … Ô“...

25
Plasma EVM Carl Park 1 , Aiden Park 1 , and Kevin Jeong 1 1 Onther Inc. May, 2019 Abstract s 8o ¡ §_ EVM(Ethereum Virtual Machine) r^ ƒ2 /^ \ " a A ¢ - a ˙ ƒ t " Ø < ˚ —+ ˇ (Smart contract) H s 2 £ § œ œ 9 { 9 l ˝ Æ ˇ (General Program) ƒ1 l x 0 p x > % i . e ƒ EVM r ¢ - a y { 9 l ˝ o ) a e ƒ , e ƒ ^ \ " f EVM ƒ z · + ˆ e H D h r + AI _ e ƒ s . M :º H\ go-ethereum, py-evm, parityü < œ r & F s 8o ¡ §9 t s \ l l ˝ ƒ ¿ ƒe . s s ( \ " f H d ^ _ 7 £ x ) a ' I º s ^ \ S X & æ (Finalize) & H ƒ ' l 0 AK TrueBit-like Verification Game ƒ s 6 x ˙ ' I 7 £ xı ¿ ”^ s _ Account storage\ " f Enter, Exit H ~ Z O ƒ ] j/ B N # ' I y ' ] j & H(State-enforceable) e ƒ ¤ \ ƒ ] j ˙ . s H ¿ ”^ s ¢ - a y 1 l x { 9 ˙ ¤ \ ƒ œ l M :º H\ 0 p x . e ƒ EVM r l > r s 8o ¡ § ^ \ ¤» ¡ / ) a » 1 ˇ ' o # Qe ƒo H s (Decentralized Application; Dapp) ƒ “@ / e ƒ ^ ü < Dapp_ » 1 ˇ ' $ , $ 0 p x, & æ $ , 6 x$ ‚¿ \ ƒ > h r ~ · ˆ e . 1 Introduction 핐핬핡핳항핡 핅핖핍 r …> RootChain contract ü < ‚( Y Us 픨핏핰핥핲핡해핯핲픩픬 6 x “o ƒ Requestable contract —‰ ¤$ ) a ‚( Y Us H d ^ 픨핃함합핬핤 핣함핡합핮픩 ƒ r% " f ^ ƒ2 /‘ ƒ s _ # 핐핬핡핳항핡 핅핖핍 ƒ ao H RootChain contract \ ] j ƒ픨핓핵핢항합해픩 ƒ 6 x H ‚( Y Us —´ ^ ƒ2 / X <s \ ƒ ~ ˆ ˛ > hZ > & h \ ƒ r% + ˆ e Requestable contract H d ^ _ ' I s \ ƒ y ' ] j H Request \ ƒ l ˝% + ˆ e H ˇ s 6 x H Requestable contract _ ' I \ ƒ ^ 픨핒핯핯해 핣함핡합핮픩ı d ^ \ s 1 l xr v l 0 AK Request \ ƒ q t$ ƒ ‚( Y Us H^ ƒ 2 /‘ ƒ s _ # d ^ _ ' I \ ƒ K { ' Request \ ˙ Request \ ƒ l ˝% H r RootChain contract \ _ K y ' ] j & 9 º K { ' Request ƒ t œ §> l ˝% ) a Challenge { ' ˙ ¢ ˙ 핃핯핮해합핮핵핯핵핳 핒핥핢핡핳핥\ ƒ: xK 필핡해핡 핡핶핡합핬핡핢합핬합해핹 º H] j\ ƒ K ˙ 2 Related Works 핐핬핡핳항핡 핍핖핐 핐핬핡핳항핡 핍핖핐 H 픿픿 s ˚ Œ ' $ : r 핐핬핡핳항핡 ¤ & ^ s 픮 핍합핮합항핡핬 핖합핡핢핬핥 핐핬핡핳항핡 H s 2 £ §\ · œ > ' 's > h r o ı K { ' 핕핔하핏\ ƒ s 6 x # d ^ _ '

Transcript of Plasma EVM · 2020-03-03 · 3 Plasma EVM 핐핬핡핳항핡핅핖핍t ˙ … Ô“...

  • Plasma EVM

    Carl Park1, Aiden Park1, and Kevin Jeong1

    1Onther Inc.

    May, 2019

    Abstract

    이더리움의 EVM(Ethereum Virtual Machine)은 블록체인에서 튜링 완전한 연산을 지원함으로써 스마트 컨트랙트(Smart contract)라는 이름으로 잘 알려진 일반 프로그램(GeneralProgram)을 동작가능하게 하였다. 플라즈마 EVM은 완전히 일반화된 플라즈마로, 플라즈마체인에서 EVM을 실행할 수 있는 새로운 형태의 플라즈마이다. 때문에 go-ethereum, py-evm,parity와 같은 현재 이더리움 클라이언트에 기반을 두고있다. 이 페이퍼에서는 자식체인의검증된 상태만이 루트체인에 확정(Finalize)되는 것을 보장하기위해 TrueBit-like VerificationGame을 이용한 상태 검증과 두 체인 사이의 Account storage에서 Enter, Exit하는 방법을 제공하여 상태가 강제되는(State-enforceable) 플라즈마 구조를 제안한다. 이는 두 체인이 완전히 동일한 구조를 갖기 때문에 가능하다. 플라즈마 EVM은 기존 이더리움 체인에 구축된 탈중앙화어플리케이션(Decentralized Application; Dapp)을 그대로 플라즈마 체인으로 옮겨와 Dapp의탈중앙성, 성능, 안정성, 사용성 모두를 개선시킬 수 있다.

    1 Introduction

    핐핬핡핳항핡 핅핖핍은 크게 RootChain contract와 오퍼레이터픨핏핰핥핲핡해핯핲픩픬 사용자픬 그리고 Requestablecontract로 구성된다픮 오퍼레이터는 자식 체인픨핃함합핬핤 핣함핡합핮픩을 운영하면서 블록을 마이닝하여핐핬핡핳항핡 핅핖핍을 관리하는 RootChain contract에 제출픨핓핵핢항합해픩하고픬 사용자는 오퍼레이터로부터블록 데이터를 받아 개별적인 노드를 운영할 수 있다픮 Requestable contract는 자식 체인의 상태 전이를 강제하는 Request를 반영할 수 있는 컨트랙트이다픮 사용자는 Requestable contract의 상태를루트 체인픨핒핯핯해 핣함핡합핮픩과 자식 체인간에 이동시키기 위해 Request를 생성하고픬 오퍼레이터는 블록을 마이닝하여 자식 체인의 상태를 해당 Request에 따라 변경한다픮 Request를 반영하는 것은RootChain contract에 의해 강제되며 만약 해당 Request가 올바르지 않게 반영된다면 Challenge 당한다픮 또한 핃핯핮해합핮핵핯핵핳 핒핥핢핡핳핥를 통해 필핡해핡 핡핶핡합핬핡핢합핬합해핹 문제를 해결한다픮

    2 Related Works

    핐핬핡핳항핡 핍핖핐 핐핬핡핳항핡 핍핖핐는 픿픿 이후 가장 먼저 나온 핐핬핡핳항핡 구현체이다픮 핍합핮합항핡핬 핖합핡핢핬핥핐핬핡핳항핡 라는 이름에 맞게 아웃풋이 픲개뿐인 트랜잭션과 해당 핕핔하핏를 이용하여 자식 체인의 상

  • 태를 표현픨핲핥핰핲핥핳핥핮해픩한다픮 오퍼레이터의 핉핮핶핡핬합핤 핂핬핯핣핫 제출과 필핡해핡 핗합해함함핯핬핤합핮핧 핁해해핡핣핫에 대비하기 위하여 유저는 블록에 자신의 핔하가 올바르게 포함되었을 경우 다시 한번 서명픨핣핯핮픜핲항픩하여자신의 트랜잭션을 확정픨핆합핮핡핬합핺핥픩할 수 있다픮 핕핔하핏의 핆합핮핡핬합해핹가 핃핯핮픜핲항핡해합핯핮 핳합핧핮핡해핵핲핥에 의해보장 되기에픬 사용자는 핅핸합해 핇핡항핥을 통해 자식 체인의 핕핔하핏를 올바르게 루트 체인으로 꺼낼 수있다픮

    핐핬핡핳항핡 핃핡핳함 핐핬핡핳항핡 핃핡핳함는 핐핬핡핳항핡 핍핖핐의단점이었던 핃핯핮픜핲항핡해합핯핮 핳합핧핮핡해핵핲핥을대체하기위하여 자식 체인의 상태픨핕핔하핏픩를 핓핰핡핲핳핥 핍핥핲핫핬핥 핔핲핥핥를 이용하여 표현한다픮 핅핸합해 핇핡항핥은 핓핍핔의합핮핣핬핵핳합핯핮 핰핲핯핯핦를 이용하여 해당 트랜잭션이 픱픩 핤핯핵핢핬핥 핳핰핥핮핤합핮핧 인 경우픬 픲픩 핤핯핵핢핬핥 핳핰핥핮핤합핮핧하는핕핔하핏에 기반한 트랜잭션인 경우픬 픳픩 소유권이 없는 핕핔하핏를 핅핸합해하려는 경우를 방지할 수 있다픮

    핍핯핲핥 핖합핡핢핬핥 핐핬핡핳항핡 핐핬핡핳항핡 핍핖핐에서 핅핸합해 핰핲합핯핲합해핹에대한기준을 핕핔하핏의 핡핧핥 핯핦 핯핵해핰핵해으로산정했다픮 핍핯핲핥 핖합핡핢핬핥 핐핬핡핳항핡은 핅핸합해 핰핲합핯핲합해핹를 핡핧핥 핯핦 해함핥 핹핯핵핮핧핥핳해 합핮핰핵해으로 산정하고 핅핸합해핡핢핬핥핯핵해핰핵해핳를 재정의함으로써 핃핯핮픜핲항핡해합핯핮 핳합핧핮핡해핵핲핥를 제거하고 기존의 핅핸합해 핧핡항핥의 안전성을 유지할 수 있음을 증명하였다픮

    핐핬핡핳항핡 핌핥핡핰 핐핬핡핳항핡 핌핥핡핰은 스마트 컨트랙트의 동작을 작은 단위로 재정의한 핓핰핥핮핤합핮핧핃핯핮핤합해합핯핮핳와 상태를 저장하는 핎핯핮픭핦핵핮핧합핢핬핥 핳해핯핲핡핧핥 해핯핫핥핮픨핎핓핔픩을 이용하여 구현된 부분적으로일반화된픨핐핡핲해합핡핬핬핹 핧핥핮핥핲핡핬합핺핥핤픩 플라즈마 모델이다픮 핓핰핥핮핤합핮핧 핃핯핮핤합해합핯핮핳의 올바른 실행 여부를 검증하기 위해 핐핬핡핳항핡 핅핖핍과 동일한 핔핲핵핥핢합해픭핬합핫핥 핶핥핲합픜핣핡해합핯핮 핧핡항핥을 사용한다픮 또한 핍핯핲핥 핖합핡핢핬핥핐핬핡핳항핡의 핅핸합해 핧핡항핥을 그대로 사용할 수 있기 때문에 필핡해핡 핡핶핡합핬핡핢합핬합해핹 또한 쉽게 해결이 가능하다픮 단픬 핐핬핡핳항핡 핅핖핍과 달리 상태를 핁핣핣핯핵핮해픭핢핡핳핥핤가 아닌 핕핔하핏로 표현하고 실행가능한 핅핖핍핯핰핣핯핤핥의 수를 줄였기 때문에 이더리움과 동일한 수준의 기능을 지원하는 것은 불가능하다픮

    3 Plasma EVM

    핐핬핡핳항핡 핅핖핍 클라이언트는 기존 이더리움 클라이언트에 기반하기에 대부분의 메커니즘은 이더리움 클라이언트과 동일하다픮 자식 체인의 블록픬 트랜잭션 그리고 핒핥핣핥합핰해등의 자료구조는 이더리움과 같다픮 다만 기존의 이더리움과 다르게 일반화된 플라즈마 프로토콜을 적용하기 위해 몇가지 변경점이 존재한다픮

    핒핯핯해핣함핡합핮 핎핥해핷핯핲핫 핁핳핳핵항핰해합핯핮 핅해함핥핲핥핵항은 핐핯핗픨핐핲핯핯핦 핯핦 핗핯핲핫픩로 인해 핃함핡합핮 핲핥핯핲핧핡핮합핺핡픭해합핯핮 혹은 핎핥해핷핯핲핫 핣핯핮핧핥핳해합핯핮이 발생할 수 있다픮 하지만 본 글에서는 핅해함핥핲핥핵항 핮핥해핷핯핲핫가 위와같은 상황에 있지 않다고 가정한다픮

    3.1 3 Types of Block and Epoch

    핐핬핡핳항핡 핅핖핍에는 Non-Request Block픬 Request Block픬 Escape Block 등 다양한 유형의 블록이 있다픮 Non-Request Block(NRB)는 사용자의 일반적인 트랜잭션을 포함하는 블록이다픮 핅해함핥핲핥핵항픬핂합해핃핯합핮픬 그리고 다른 블록체인의 블록과 동일하다픮

  • Request Block(RB)은 Request를 자식 체인에 적용하기 위한 블록이다픮 사용자는 Request를 생성하고오퍼레이터가 RB를생성하여 Request를자식체인에적용한다픮 이는 RootChain contract가해당 RB의 transacctionsRoot를 지정하므로 어느 트랜잭션이 RB에 들어가야하는지 강제할 수 있다픮

    Escape Block(EB)은 사용자가 오퍼레이터에 의한 핂핬핯핣핫 핗합해함함핯핬핤합핮핧 공격에 대비하기 위한 일종의 RB이다픮 Escape과 Rebase의 자세한 내용은 픿픿 항목을 참조하라픮

    Epoch은 여러 블록들을 포함하는 주기이다픮 블록의 타입에 따라 Epoch또한 Non-RequestEpoch(NRE)픬 Request Epoch(RE)픬 Escape Epoch(EE)으 구분된다픮 Epoch의 길이는 해당 Epoch에포함되는 블록의 갯수이며픬 NRE의 길이는 사전에 정의된 상수로 변하지 않는다픮 하지만 RE와EE의 경우 유저가 Request 혹은 Escape request을 생성할 경우 길이가 가변적으로 늘어나거나 줄어들 수 있다픮 단픬 핇핥핮핥핳합핳 블록은 픰번째 NRE에 포함되며픬 NRE#0의 길이는 항상 픱 이다픮

    RootChain contract는 어느 종류의 Epoch이 배치되어야 하는지 지정함으로써 자식 체인의 상태 변화를 강제한다픮 NRE를 통해 자식 체인에서 발생한 트랜잭션을 허용한다픮 Request가 생성될 경우 NRE 이후에 RE가 오도록 배치하고픬 Escape request이 생성될 경우 EE 이후에 기존의NRE와 RE가 Rebase 되도록 한다픮

    3.2 Block Mining

    RootChain contract는 기본적으로 다음과 같은 순서로 핅핰핯핣함을 배치시킴으로써 자식 체인의 트랜잭션과 루트 체인에서 생성된 핒핥핱핵핥핳해을 반영할 수 있다픮

    픱픮 NRE#0 이후에 NRE#1이 위치한다픮픲픮 NRE#N 이후엔 항상 RE#(N+1)이 위치한다픮 마찬가지로 RE#N 이후엔 NRE#(N+1)이 위치한다픮픳픮 현재 Epoch이 NRE#N 혹은 RE#(N+1) 일 때 생성된 Request은 RE#(N+3) 에 반영된다픮 만약Request이 생성되지 않는다면픬 해당 RE의 길이는 픰이다픮

    RootChain contract는위처럼두종류의블록을제출받기위해주기적으로 Accept NRB픬 AcceptRB 상태로 변한다픮 Accept NRB는 오직 NRB만 제출될 수 있는 상태이며픬 Accept RB는 오직RB만 제출될 수 있는 상태이다픮 오퍼레이터는 RootChain contract의 상태에 따라 Request block또는 Non-request block를 제출해야 한다픮

    핆합핧핵핲핥 픿픿는 이러한 RootChain contract의 상태가 어떻게 변경되는지 보여준다픮 단픬 여기서 다루는 내용은 핐핬핡핳항핡 핅핖핍의 핃핯핮해합핮핵핯핵핳 핒핥핢핡핳핥를 포함하지 않는다픮 전체적인 동작 과정에 대한내용은 이후의 섹션 픿픿에서 다룬다픮

    3.3 Block Submission

    오퍼레이터는 각 블록마다 세 종류의 머클루트 값인 stateRoot픬 transactionsRoot픬 receiptsRoot를 제출해야 한다픮 단픬 transactionsRoot만 제출하는 것이 가능한 상황도 있는데픬 자세한 내용은 섹션픿픿에서다룬다픮 만약상태전이에대한연산이제대로실행되지않아올바르지않은머클루트값이

  • 핆합핧핵핲핥 픱픺 핓합항핰핬합픜핥핤 핳해핡해핥 해핲핡핮핳합해합핯핮 핯핦 핒핯핯해핃함핡합핮 핣핯핮해핲핡핣해

    제출되었다면픬 Computation Challenge를 통해 올바른 상태를 가지고 있는 블록으로 복구 될 수 있다픮 이 방식은 핔핲핵핥핂합해의 핶핥핲합픜핣핡해합핯핮 핧핡항핥과 유사한 방식이며픬 preStateRoot 및 postStateRoot를사용하여 픧블록 별 상태 전이 함수픧를 확인하는 방식으로 해결한다픮

    3.4 Apply Request

    Request은 사용자가 RootChain contract에 트랜잭션을 보냄으로써 생성된다픮 Enter request와 Exitrequest은 RB에 포함되며픬 Escape request과 Undo request은 EB에 포함된다픮 Enter request은 루트체인에서 먼저 상태를 변경하고 Request 트랜잭션픨Request transaction픩의 형태로 블록에 포함된다픮 Exit픬 Escape픬 그리고 Undo request의 경우 Request 트랜잭션의 형태로 블록에 포함된 이후 루트 체인에서 반영된다픮 만약 해당 Request 트랜잭션이 실패픨핒핥핶핥핲해핥핤픩되었다면 Exit Challenge를통해 루트 체인에서 반영되는 것을 방지할 수 있다픮

    Request을 반영할 수 있는 컨트랙트는 Requestable 하며픬 Requestable 컨트랙트의 특정 함수를호출함으로써루트체인과자식체인에서 Request을반영할수있다픮 각컨트랙트별로 Requestable인터페이스를 개별적으로 구현하여 이더리움이 지향하는 핇핥핮핥핲핡핬픭핰핵핲핰핯핳핥 핣핯항핰핵해합핮핧 핰핬핡해핦핯핲항 을플라즈마화픨핐핬핡핳항핡핦핹픩 할 수 있다픮오퍼레이터는 RootChain contract가 Request을 생성할 수 있도록 각 체인의 Requestable 컨트랙

    트의 주소를 사전에 연결해야한다픮 단픬 각 체인의 Requestable 컨트랙트는 반드시 동일한 codeHash가져야 하며픬 이는 두 컨트랙트가 같은 핓해핯핲핡핧핥 레이아웃을 갖는다는 것을 의미한다픮

    픳픮픴픮픱 핒핥핱핵핥핳해 핡핮핤 핒핥핱핵핥핳해 핔핲핡핮핳핡핣해합핯핮

    Request는 다음 픴개의 파라미터로 구성된다픮

    • requestor픺 Request를 생성한 어카운트

    • to픺 루트체인에 배포된 Requestable contract의 주소

    • trieKey픺 Request의 식별자

    • trieV alue픺 Request의 값

  • Request transaction은 Request block에 포함되고 누구나 해당 블록을 마이닝할 수 있어야 하기에 Null Address를 Transactor로 하여 생성된다픮 Null Address(NA)는 비밀키가 없으며 주소가0x00다픮 Request transaction 은 다음 픵개의 파라미터로 구성된다픮

    • sender픺 NA

    • to픺 자식 체인에 배포된 Requestable 컨트랙트의 주소

    • value픺 픰

    • 핦핵핮핣해합핯핮 핳합핧핮핡해핵핲핥픺 Requestable의 함수를 호출하기 위한 핦핵핮핣해합핯핮 핳합핧핮핡해핵핲핥

    • 핰핡핲핡항핥해핥핲핳픺 핥항핰함핒핥핱핵핥핳해핡핢핬핥의 함수를 호출하기 위한 파라미터

    RootChain contract는 Request transaction의 해시와 RB의 transactionsRoot를 계산하여 RB에Request이 반드시 포함될 수 있도록 강제할 수 있다픮 또한 유저들은 RootChain contract에서Request 데이터를 가져올 수 있기 때문에 RB에 대해서는 오퍼레이터가 핂핬핯핣핫 핗합해함함핯핬핤합핮핧 핁해해핡핣핫할 수 없다픮 이는 EB 또한 마찬가지이다픮

    픳픮픴픮픲 핒핥핱핵핥핳해핡핢핬핥 핃핯핮해핲핡핣해

    Requestable 인터페이스는 아래의 함수를 가지고 있으며픬 Requestable contract는 아래 Requestable인터페이스를 구현한다픮

    합 핮 해 핥 핲 핦 핡 핣 핥 핒핥핱핵핥핳해핡핢핬핥 핻핦핵핮핣 해 합 핯핮 핡핰핰핬핹핅핮해핥핲 픨 핢핯핯핬 합핳핒핯핯해핃함핡합핮 픬 핵 합핮해픲픵픶 핲핥핱핵핥핳해 핉핤 픬 핡핤핤핲핥핳핳

    핲핥핱핵핥핳 해핯핲 픬 핢핹해핥핳픳픲 해핲 합핥핋핥핹 픬 핢핹해핥핳 해 핲 합 핥핖핡 핬핵핥 픩핥핸 해 핥 핲핮핡 핬 핲 핥 해핵 핲핮 핳 픨 핢핯핯핬 핳핵 핣 핣 핥 핳 핳 픩 픻

    핦 핵핮핣 해 합 핯핮 핡핰핰핬핹핅핸합해 픨 핢핯핯핬 합핳핒핯핯해핃함핡합핮 픬 핵 합핮해픲픵픶 핲핥핱핵핥핳해 핉핤 픬 핡핤핤핲핥핳핳핲핥핱핵핥핳 해핯핲 픬 핢핹해핥핳픳픲 해핲 합핥핋핥핹 픬 핢핹해핥핳 해 핲 합 핥핖핡 핬핵핥 픩

    핥핸 해 핥 핲핮핡 핬 핲 핥 해핵 핲핮 핳 픨 핢핯핯핬 핳핵 핣 핣 핥 핳 핳 픩 픻

    핦 핵핮핣 해 합 핯핮 핡핰핰핬핹핅핳핣핡핰핥 픨 핢핯핯핬 합핳핒핯핯해핃함핡합핮 픬 핵 합핮해픲픵픶 핲핥핱핵핥핳해 핉핤 픬 핡핤핤핲핥핳핳핲핥핱핵핥핳 해핯핲 픬 핢핹해핥핳픳픲 해핲 합핥핋핥핹 픬 핢핹해핥핳 해 핲 합 핥핖핡 핬핵핥 픩

    핥핸 해 핥 핲핮핡 핬 핲 핥 해핵 핲핮 핳 픨 핢핯핯핬 핳핵 핣 핣 핥 핳 핳 픩 픻

    핦 핵핮핣 해 합 핯핮 핡핰핰핬핹핕핮핤핯 픨 핢핯핯핬 합핳핒핯핯해핃함핡합핮 픬 핵 합핮해픲픵픶 핲핥핱핵핥핳해 핉핤 픬 핡핤핤핲핥핳핳핲핥핱핵핥핳 해핯핲 픬 핢핹해핥핳픳픲 해핲 합핥핋핥핹 픬 핢핹해핥핳 해 핲 합 핥핖핡 핬핵핥 픩

    핥핸 해 핥 핲핮핡 핬 핲 핥 해핵 핲핮 핳 픨 핢핯핯핬 핳핵 핣 핣 핥 핳 핳 픩 픻핽

    Requestable contract에서 Request를 통해 변경이 가능한 변수는 요청가능픨Requestable픩한 변수이다픮 단픬 Requestable contract의 모든 변수가 요청가능픨Requestable픩일 필요는 없다픮 Request와 관

  • 련된 기능이 필요 없는 변수도 있고픬 특정 변수에 대한 Request 권한을 사용자별로 구분해야 하는경우도 고려해야 하기 때문이다픮 예를 들어픬 누구나 타인의 토큰 밸런스에 대해 Request 가 가능하다면 이는 바람직하지 않을 것이다픮 따라서 우리는 미리 Requestable 컨트랙트에 이러한 문제를해결할 수 있는 로직을 배치하고자 한다픮 이는 trieKey를 이용하여 특정 변수에 대한 Request 권한을 확인 할 수 있기에 가능하다픮

    Request의 종류에 따라 Request transaction은 다른 핆핵핮핣해합핯핮 핳합핧핮핡해핵핲핥를 가진다픮 또한 Re-questable 컨트랙트의 구현 예시는 픿픿를 참고하라픮

    픳픮픴픮픳 핁핰핰핬핹 핅핮해핥핲 핒핥핱핵핥핳해

    RootChain contract는 Enter request를 각 체인에 배포된 Requestable contract에 다음과 같이 반영한다픮

    픱픮 사용자는 RootChain contract으로 RootChain.startEnter()를 호출하는 트랜잭션을 전송한다픮픲픮 RootChain contract는 Enter request를 Requstable contract에 적용한다픮 이는 루트 체인에서 일어난다픮 만약 이 과정에서 트랜잭션이 실패픨핲핥핶핥핲해핥핤픩된다면 Enter request는 생성되지 않는다픮픳픮 픲단계가 올바르게 진행되었다면픬 RootChain contract는 Enter request를 기록한다픮픴픮 Request Epoch에서 오퍼레이터는 Request transaction을 포함하여 Request Block을 마이닝한다픮픵픮 Request transaction이 자식 체인의 상태를 Enter request에 따라 변경한다픮

    핆합핧핵핲핥 픲픺 핅핮해핥핲 필합핡핧핲핡항

  • 픳픮픴픮픴 핁핰핰핬핹 핅핸합해 핒핥핱핵핥핳해

    RootChain contract는 Exit request를각체인에배포된 Requestable contract에다음과같이반영한다픮

    픱픮 사용자는 RootChain contract으로 RootChain.startExit()를 호출하는 트랜잭션을 전송한다픮픲픮 Enter request와는 다르게 Exit request는 즉각적으로 기록되고 Request transaction의 형태로RB에 포함된다픮픳픮 RB에 대한 Challenge 핐핥핲합핯핤가 종료된 이후 Exit request에 대한 Challenge 핐핥핲합핯핤가 시작된다픮만약 픲단계의 Request transaction이 실패되었다면 RootChain.challengeExit() 함수를 통해 ExitChallenge 할 수 있다픮픴픮 만약 픳단계의 Challenge가성공적으로진행되지않았다면픬유저가RootChain.finalizeRequest()를호출함으로써 Exit request는 Finalize된다픮 해당 함수에서 Exit request는 루트 체인에 배포된Requestable contract에 Request을 반영한다픮

    핆합핧핵핲핥 픳픺 핅핸합해 필합핡핧핲핡항

    픳픮픴픮픵 핁핰핰핬핹 핅핳핣핡핰핥 핡핮핤 핕핮핤핯 핲핥핱핵핥핳해

    Escape request와 Undo request는 Exit request와 마찬가지로 처리되지만픬 Request transaction은Request Block이 아닌 Escape Block에 포함된다픮

  • 핆합핧핵핲핥 픴픺 핒핥핱핵핥핳해 핡핮핤 핣함핡핬핬핥핮핧핥 핤합핡핧핲핡항

    3.5 Continuous Rebase

    플라즈마 핅핖핍에서 Rebase1는 정상적인 작동과정의 일부이다픮 따라서 지속적이고 주기적인Rebase를 통해 사용자들의 Escape request을 반영할 수 있게 한다픮 이를 통해 사용자들은 필핡해핡핡핶핡합핬핡핢합핬합해핹 문제픨이하 필핁문제픩가 있을 경우 Escape request를 제출하여 Finalize된 마지막 블록을기준으로 안전하게 탈출할 수 있다픮

    픳픮픵픮픱 핒핥핢핡핳핥

    Rebase는 기존에 루트체인에 제출한 블록을 다른 블록을 기준으로 다시 마이닝하는 것이다픮 즉픬트랜잭션들을 다른 부모블록을 기준으로 재연산하는 것이다픮 때문에 Rebase전과 후의 블록의transactionRoot는 서로 일치하게 된다픮 하지만 각 트랜잭션의 구체적인 실행결과는 달라질 수 있기 때문에픬 stateRoot와 receiptsRoot는 일치하지 않을 수 있다픮기존의 NRE픬 ORE들을 Rebase하는 Epoch은 Rebased Non-Request Epoch(NRE’)픬 Rebased Request

    Epoch(RE’)이다픮 마찬가지로 Rebased Non-Request Block(NRB’)픬 Rebased Request Block(RB’)는Rebase된 블록들이다픮

    픳픮픵픮픲 핃핹핣핬핥핳 핡핮핤 핓해핡핧핥핳

    핐핬핡핳항핡 핅핖핍의작동은 Cycle을하나의주기로하여이루어진다픮 하나의 Cycle은총 픴개의 Stage로구성되어 있다픮 각 Stage는 순서대로 Pre-commit픬 DA-check픬 Commit픬 Challenge에 해당한다픮 모든Stage를 순서대로 완료하면 해당 Cycle은 Finalize 되는 구조이다픮 전체적인 동작 과정은 핆합핧핵핲핥픿픿를 참고하라픮

    1It is named after git’s rebase.

  • 핆합핧핵핲핥 픵픺 핃핹핣핬핥핳 핡핮핤 핳해핡핧핥핳

    픳픮픵픮픳 핐핲핥픭핣핯항항합해

    Pre-commit은 일종의 예비 제출 단계로픬 오퍼레이터는 픿픿와 같이 블록을 마이닝한 후 해당 블록들의 transactionRoot를 루트체인에 제출한다픮 또한 동시에 사용자들에게 해당 블록을 전파한다픮 만약 Pre-commit 단계에서 오퍼레이터가 잘못된 블록 데이터를 전송하거나 혹은 전체 데이터를 전송하지 않을 경우 사용자는 Escape request를 제출할 수 있다픮 단픬 RB의 경우 RootChaincontract에 의해 transactionRoot가 결정되기 때문에픬 이를 루트체인에 제출하지 않아도 된다픮

    transactionRoot만을 루트체인에 제출하는 이유는 stateRoot와 receiptsRoot가 Rebase과정에서최종적으로 결정되기 때문이다픮 또한 반드시 transactionRoot를 제출해야 하는 이유는 해당 블록에 포함될 트랜잭션이 무엇인지 알 수 있다면 해당 블록의 올바른 stateRoot또한 알 수 있기 때문이다픮 따라서 오퍼레이터에게서 RootChain contract에 제출된 transactionRoot와 일치하는 블록 데이터를 전송받은 사용자는 이후 Commit단계에서 오퍼레이터가 데이터를 숨기고 잘못된stateRoot를 제출하더라도 Challenge 할 수 있다픮

    핆합핧핵핲핥 픶픺 핐핲핥픭핣핯항항합해

    픳픮픵픮픴 필핁픭핣함핥핣핫

    DA-check는 사용자가 Pre-commit 단계에서 오퍼레이터가 전송한 블록 데이터의 가용성과 트랜잭션의 데이터 크기를 확인하고 문제가 없는지 점검하는 단계이다픮 사용자가 필핁문제 뿐만 아니라각 트랜잭션의 크기도 점검해야 하는 이유는 루트체인 핂핬핯핣핫 핧핡핳 핬합항합해을 초과하는 트랜잭션은 루트 체인에서 검증이 불가능하기 때문이다픮 만약 점검 과정에서 문제가 있는 비잔틴 상황이라면픬사용자는 스스로를 보호하기 위하여 해당 체인에서 비상탈출픨핅핳핣핡핰핥픩해야 한다픮

    픱픩 륅륳륣륡륰륥 륲륥륱륵륥륳르 제제제출출출 Escape request는 오퍼레이터에 의해 필핁 문제가 생겼을 경우 사용자가 해당 플라즈마 체인에서 안전하게 탈출할 수 있는 장치이다픮 구조와 기능은 Exit request와 동일하지만픬 처리기준이 되는 블록이 항상 이전 Cycle의 Commit단계의 마지막 블록이라는 점에서차이가 있다픮 이는 사용자가 이전 Cycle의 마지막 상태를 기준으로 해당 체인에서 탈출할 수 있도

  • 록 하기 위함이다픮 만약 이전 Cycle에서 핅핳핣핡핰핥하지 않았다면 사용자는 이전 Cycle에 대한 데이터를 모두 올바르게 전송받았음을 의미하고 이는 곧 해당 Cycle의 올바른 상태가 무엇인지 알고 있음을 의미한다픮

    픲픩 해해해당당당 륃륹륣륬륥에에에 핅핮해핥핲한한한 경경경우우우 륕륮륤륯 륲륥륱륵륥륳르 제제제출출출 Escape request는 이전 Cycle의 마지막 블록을 기준으로 처리되기 때문에 현재 Cycle의 Enter request를 되돌리는 역할을 할 수 없다픮때문에 사용자는 반드시 현재 Cycle의 핅핮해핥핲를 취소하는 Undo request를 Escape request와 함께 제출하여야 한다픮 Undo request는 자식 체인에 Enter request가 반영되는 것을 방지하며픬 이후 Undorequest가 Finalize 되면 사용자는 루트체인에서의 Enter request로 인한 상태 전이를 되돌릴 수 있다픮

    픳픩해해해당당당 륃륹륣륬륥에에에 핅핸합해한한한경경경우우우 핅핸합해취취취소소소 만만만약 Escape request로모든상태를 핅핸합해한후에또다시 Exit request가 실행된다면 해당 Request는 핲핥핶핥핲해 되어 Exit challenge의 대상이 될 수 있다픮 따라서 Escape request를 제출한 사용자는 RootChain contract에 해당 Cycle의 모든 Exit request를 취소하는 Request을 제출해야 한다픮 취소된 Exit request는 그 실행결과와 관계 없이 Exit challenge의근거가 될 수 없다픮 또한 취소된 Exit request는 Finalize 되더라도 루트체인에서 실질적인 상태변환을 발생시킬 수 없다픮 따라서 취소된 Exit request로 사용자는 어떠한 부적절한 이득도 얻지도않으며 손실도 입지 않을 수 있다픮

    DA-check 단계가 명시적으로 필요한 이유는 Pre-commit 단계에서 오퍼레이터가 데이터를 올바르게 전송하지 않는 경우 사용자가 안전하게 Escape request를 제출할 수 있도록 여유시간을 주는데 그 목적이 있다픮 예를 들어픬 오퍼레이터가 악의적으로 Pre-commit 단계의 마지막에 핂핬핯핣핫핗합해함함핯핬핤합핮핧 핁해해핡핣핫을 하더라도 사용자가 이를 인지하고 적절한 행동을 취할할 수 있도록 여유 시간을 제공하는 것이다픮 따라서 Pre-commit 단계의 초기부터 필핁문제가 발생했을 경우 사용자는DA-check 단계를 기다리지 않고 즉시 Escape request를 제출할 수 있다픮

    핆합핧핵핲핥 픷픺 필핁픭핣함핥핣핫

    픳픮픵픮픵 핃핯항항합해

    Commit은 오퍼레이터가 Pre-commit과 DA-check에서 제출된 Escape request와 Undo request를 반영하는 Escape block(EB)를 제출하고픬 EB를 기준으로 Pre-commit단계에서 제출된 모든 블록들을Rebase하고 Pre-commit된 블록의 stateRoot와 receiptsRoot를 제출하는 과정이다픮

    픱픰

  • 이 때 EB의 부모블록은 이전 Cycle의 핃핯항항합해된 마지막 블록이다픮 단픬 Escape request가 단 하나도 제출되지 않았을 경우픬 EB 제출 과 Rebase는 생략하고픬 Pre-commit 단계에서 마이닝한 블록의 stateRoot와 receiptsRoot를 그대로 제출한다픮

    핆합핧핵핲핥 픸픺 핃핯항항합해

    픳픮픵픮픶 핃함핡핬핬핥핮핧핥

    Challenge단계에서 사용자들은 Commit 단계에서 제출된 블록이 유효하지 않을 경우픬 이에 대한 Challenge를 제출할 수 있다픮 단픬 이 때 제출가능한 Challenge는 Exit challenge를 제외한 NullAddress Challenge픬 Computation Challenge이다픮제출된 Challenge가 다수일 경우 챌린저가 승리하는 순간 다른 Challenge는 취소된다픮 또한 챌

    린저가 승리한 경우 해당 Cycle의 Commit된 블록을 포함한 이후의 모든 블록들이 취소되며픬 해당 Cycle은 DA Check단계로 되돌아간다픮

    핆합핧핵핲핥 픹픺 핃함핡핬핬핥핮핧핥

    3.6 Finalize

    Challenge 단계 동안 성공적인 챌린지가 없다면픬 해당 Cycle은 Finalize 되며픬 Commit 단계에서 제출된 모든 블록은 동시에 Finalize 된다픮 단픬 제출된 모든 챌린지가 종료되기 전까지 Challenge 단계는 종료되지 않으며픬 해당 Cycle을 포함한 이후의 모든 Cycle은 Finalize되지 않는다픮

    3.7 Stage Length

    Stage length는 Pre-commit과 Commit에서 처리되어야 하는 Epoch의 수이다픮 Pre-commit length는NNRE ∗ 2 로 이는 RootChain contract 배포시 오퍼레이터에 의해 결정된다픮 Commit length는NNRE ∗2+1로역시 RootChain contract 배포시결정되며픬추가된하나의 Epoch은 Escape Epoch을의미한다픮

    픱픱

  • 3.8 Stage Period

    Stage period는 각 Stage에 할당된 시간이다픮 Pre-commit period과 Commit period의 경우이후 다룰Halting condition의 충족 기준이 되며픬 DA-check period 와 Challenge period는 단순히 해당 Stage기간이다픮모든 Stage period는 RootChain contract 배포시 오퍼레이터에 의해 결정된다픮 Pre-commit과

    Commit은 Stage period와 관계없이 각 Stage length에 해당하는 Epoch을 제출한 경우 완료될 수 있다픮 DA-check와 Challenge는 오직 Stage period 이후에만 완료된다픮 단픬 Challenge period 의 경우Computation Challenge의 진행여부에 따라 연장될 수 있다픮

    3.9 Halting condition

    어떠한 이유로든 오퍼레이터가 Cycle의 각 Stage의 정해진 절차를 제대로 수행하지 않을 경우Halting condition이 충족될 수 있다픮 Halting condition이 충족될 수 있는 Stage는 Pre-commit픬Commit이며픬 구체적인 충족 조건과 그 결과는 다음과 같다픮

    핐핲핥픭핣핯항항합해 오퍼레이터가 Pre-commit period 이내에 Pre-commit length개의 Epoch을 모두 제출하지 못할 경우 핈핡핬해합핮핧 핣핯핮핤합해합핯핮이 충족된다픮 이 경우 해당 체인은 Shutdown된다픮

    핃핯항항합해 오퍼레이터가 Commit period 동안 Commit length개의 Epoch을 모두 제출하지 못할 경우 핈핡핬해합핮핧 핣핯핮핤합해합핯핮이 충족된다픮 이 경우 해당 Cycle을 포함한 이후의 모든 Cycle의 진행이 일시중단된다픮 만약 멈춘 시점에 EB가 제출되지 않은 상태라면 누구나 EB를 제출할 수 있게 되고픬 해당 블록이 제출되면 일시 중단된 Cycle이 재개된다픮 만약 Rebase의 진행중에 멈췄다면 해당 체인은 Shutdown된다픮

    핓함핵해핤핯핷핮 Shutdown은 일종의 플라즈마 체인 폐쇄 절차이다픮 Shutdown이 되면 더 이상 해당체인의 추가적인 Cycle은 진행될 수 없다픮 오직 핌핡핳해 픜핮핡핬합핺핥핤 Cycle을 기준으로 Escape request제출 픭 EB 제출 픭 Challenge를 반복하여 해당 체인의 모든 사용자들이 안전하게 핅핸합해할 수 있도록 한다픮 Shutdown상태에서는 누구나 EB제출이 가능하기 때문에 사용자들 스스로 핅핸합해이 가능하다픮

    지금까지 살펴본 하나의 Cycle의 동작과정은 핆합핧핵핲핥 픿픿로 나타낼 수 있다픮

    3.10 Overlap of Cycle

    지금까지 논의한 것은 하나의 Cycle의 동작 과정이었다픮 여러개의 Cycle이 맞물렸을 때는 이전Cycle의 Challenge단계의 완료 여부와 관계 없이 다음 Cycle의 Pre-commit 단계가 시작될 수 있다픮

    핆합핧핵핲핥 픿픿에서 Cycle 픲의 Pre-commit 단계가 완료되고 DA-check 단계가 시작됨과 동시에 다음Cycle인 Cycle 픳의 Pre-commit 과정이 시작됨을 알 수 있다픮 이 때픬 Cycle 픳의 Pre-commit 단계의첫 블록은 Cycle 픲의 가장 마지막 Pre-commit 블록을 기준으로 상태가 연산된다픮 이처럼 Cycle이서로 맞물려 진행되기 위해서는 다음과 같은 조건들이 충족되어야 한다픮

    픱픲

  • 핆합핧핵핲핥 픱픰픺 핃핯핮해합핮핵핯핵핳 핲핥핢핡핳핥 픨핓핥핱핵핥핮해합핡핬 핣핹핣핬핥픩

    픱픮 현재 Cycle의 Pre-commit이 완료되는 즉시 다음 Cycle의 Pre-commit이 시작된다픮픲픮 현재 Cycle의 Pre-commit이 완료되는 즉시 현재 Cycle의 DA-check가 시작된다픮픳픮 현재 Cycle의 Commit은 이전 Cycle의 Commit 완료 이후에 시작될 수 있다픮

    이를 통해 오퍼레이터가 정상적으로 자식체인을 운영할 경우 사용자들은 계속 해당 체인을 이

    용할 수 있게 된다픮 중요한 것은 이전 Cycle의 Challenge stage의 완료와 관계 없이 다음 Cycle의진행이 가능하다는 것이다픮 단픬 이 경우 이후의 Cycle에 대한 Challenge가 종료되더라도 이전Cycle이 Finalize되기 전까지는 Finalize될 수 없다픮

    핆합핧핵핲핥 픱픱픺 핏핶핥핲핬핡핰 핯핦 핣핹핣핬핥

    픱픳

  • 3.11 Finality

    핂핬핯핣핫 플라즈마 핅핖핍은 챌린지 기간을 어떠한 유효한 챌린지 없이 넘긴 블록에 대해 플라즈마하핔처럼 블록의 체크포인트를 지정할 수 있다픮

    핒핥핱핵핥핳해 핂핬핯핣핫의 핆합핮핡핬합해핹와 별개로 핅핮해핥핲를 제외한 모든 Request에 대한 핆합핮핡핬합해핹도 존재한다픮Request가 포함된 블록이 Finalize 되면 해당 Request에 대한 챌린지 기간인 Request challengeperiod가 시작되는데픬 이 기간 동안 어떠한 유효한 챌린지도 제출되지 않는다면 해당 Request는Finalize 된다픮

    4 Challenge

    다음과 같은 Challenge를 통해 블록 혹은 Request의 유효성을 검증한다픮

    4.1 Null Address Challenge

    NRB에 Transactor가 NA인 트랜잭션이 있는지 확인한다픮 그러한 트랜잭션은 Request transac-tion을 의미하기 때문에 RB픬 EB가 아닌 NRB에 포함될 경우는 오퍼레이터가 비잔틴한 경우이다픮

    4.2 Exit challenge

    RB에포함된 Exit request와 Escape request가유효하지않다면이에대응하는 Request transaction은핒핥핶핥핲해 되며픬 해당 Request는 반드시 RootChain contract에서 삭제되어야 한다픮 Exit challenge는핒핥핶핥핲해 된 Request transaction을 증거로 삼아 올바르지 않은 Exit request를 검증한다픮 그러나Exit request에 대해 챌린지하기 전에픬 해당 Request를 포함하고 있는 블록이 Finalize 되어야 한다픮 그 이유는 유효한 블록에서 핒핥핶핥핲해되지 않는 Request transaction이 유효하지 않은 블록에서는핒핥핶핥핲해될 수 있기 때문이다픮 따라서 Exit challenge는 챌린지 대상을 포함하는 블록이 Finalize된후에 시작 될 수 있다픮

    4.3 Computation Challenge

    오퍼레이터가 제출한 NRB픬 RB픬 EB에 대해 Computation Challenge는 오퍼레이터가 트랜잭션을 올바르게 실행했는지를 검증한다픮 오퍼레이터가 잘못된 stateRoot를 제출하면픬 blockData픬preStateRoot 및 postStateRoot를 바탕으로 핔핲핵핥핂합해픭핬합핫핥 핖핥핲합픜핣핡해합핯핮 핧핡항핥을 통해 챌린지 된다픮

    preState = commitedStateRoots[i− 1]

    postState = commitedStateRoots[i] = STFblock(preState,Blocki)

    RootChain contract에서 STFblock를 실행한 핯핵해핰핵해과 이미 제출된 핯핵해핰핵해을 비교하여 블록의상태 전이가 올바르게 이루어졌는지 검증할 수 있다픮

    픱픴

  • 4.4 Verification Game

    핔핲핵핥핂합해은 핯핵해핳핯핵핲핣핥된 연산을 검증하기 위한 방법으로 핖핥핲합픜핣핡해합핯핮 핧핡항핥을 제안했다픮 그러나핔핲핵핥핂합해이 제안한 게임의 마지막 단계는 이더리움에서 연산을 한 번 수행하고 실제 핯핵해핰핵해과 예상핯핵해핰핵해을 비교하는 방법을 사용한다픮 우리는 핏함핡핬핯 핌합항합해핥핤와 핐핡핲핳핥핣 핌핡핢핳에서 구현해 왔던 핅핖핍내부에서 핅핖핍을 실행하는 스마트 컨트랙트인 핳핯핬핅핖핍 픿픿을 사용하여 연산 결과를 검증하고자한다픮 단픬 수수료 위임 체인을 사용하려면 수수료 위임 트랜잭션 실행 모델이 핳핯핬핅핖핍에 반영되어야 한다픮

    핆합핧핵핲핥 픱픲픺 핖핥핲합픜핣핡해합핯핮 핧핡항핥

    5 Attack scenarios

    5.1 Block Withholding Attack

    오퍼레이터가 Pre-commit단계에서 핂핬핯핣핫 핷합해함함핯핬핤합핮핧 핡해해핡핣핫을 할 경우 사용자들은 Pre-commit과DA-check 단계에서 Escape request를 통해 해당 체인에서 안전하게 핅핸합해 할 수 있다픮

    5.2 Invalid block

    오퍼레이터는 Commit단계에서 올바르지 않은 블록을 루트체인에 제출할 수 있다픮 하지만 이 경우 해당 체인에 남아있는 사용자들은 모두 해당 블록의 트랜잭션이 무엇인지 확인한 상태이므로

    올바른 블록이 어떻게 구성되어야 하는지 알 수 있다픮 따라서 사용자는 Computation challenge를통해 올바르지 않은 블록을 취소할 수 있다픮

    픱픵

    https://hackmd.io/s/SkxNKAXU7

  • 6 Further Research

    6.1 Transaction Finality

    Rebase과정을 플라즈마 체인의 정상적인 작동과정으로 간주하면서 필핁 문제는 해결되었다픮 하지만 사용자들은 이러한 점을 악용해 필핁문제의 여부와 관계 없이 Escape request를 제출하여 의도적으로 본인의 트랜잭션을 취소할 수 있게 되었다픮 따라서 사용자는 해당 트랜잭션을 취소하는Escape request가 제출되었는지 반드시 확인해야 한다픮예를 들어픬 탈중앙 거래소픨필핥핣핥핮해핲핡핬합핺핥핤 핥핸핣함핡핮핧핥픻 필핅하픩가 핐핬핡핳항핡 핅핖핍위에서 운영되고 있다

    고 하자픮 또한픬 하나의 Cycle이 Finalize 되기 까지 약 픲픴시간이 소요된다고 하자픮 사용자 핁는 약픱시간전에사용자 핂에게서토큰 핔를 픱픰픰핅핔핈에구매했다픮 하지만현재토큰 핔의가격은 픱핅핔핈로폭락하였다픮 이 경우 사용자 핁는 해당 트랜잭션이 Finalize 되기 전에 Escape request를 제출하여본인의 모든 잔액을 미리 출금하여 해당 트랜잭션을 취소시킬 것이다픮 이 경우 해당 토큰을 판매한 사용자 핂는 중대한 손실을 입을 수 있다픮

    6.2 Light Client Support

    사용자들은 필핁문제의 발생 여부를 인지하기 위해 항상 모든 블록 데이터를 다운로드 받아야 한다픮 다시 말해 모든 사용자들이 해당 플라즈마 체인에서 풀노드픨핆핵핬핬 핮핯핤핥픩를 구동시키고 있어야함을 의미한다픮 이는 핕하픨핕핳핥핲 핅핸핰핥핲합핥핮핣핥픩를 심각하게 저해하는 요소가 될 수 있다픮물론 이러한 문제는 비단 핐핬핡핳항핡 핅핖핍에만 해당되는 것은 아니다픮 대부분의 다른 플라즈마

    모델들도 사용자들이 모든 데이터를 확인하기 위해 풀노드를 구동시켜야 하는 제약을 갖고 있다픮때문에 이러한 문제점을 해결하기 위해 핅핲핡핳핵핲핥 핣핯핤합핮핧을 이용하여 일종의 핌합핧함해 핣핬합핥핮해만으로도필핡해핡 핡핶핡합핬핡핢합핬합해핹를 확인할 수 있게하는 연구가 제시되고 있다픮2 핐핬핡핳항핡 핅핖핍에서도 이와 같이 사용자들이 풀노드가 아닌 핌합핧함해 핣핬합핥핮해만으로 필핁문제의 발생 여부를 인지할 수 있도록 하기 위해추가적인 연구가 필요하다픮

    6.3 Addressing Requestable Contracts in Both Chain

    Requestable contract는 양 체인에 동일한 핣핯핤핥핈핡핳함를 가져야 한다픮 기존의 핃핯핮해핲핡핣해 핃핲핥핡해합핯핮핔핲핡핮핳핡핣해합핯핮은 핔핲핡핮핳핡핣해핯핲의 주소와 핎핯핮핣핥를 이용하여 컨트랙트의 주소를 결정해야 했기에픬 오퍼레이터가 두 컨트랙트의 핣핯핤핥핈핡핳함와 주소를 확인하고 RootChain contract에 항핡핰핰합핮핧하는 방법밖에 없었다픮 하지만 핃핯핮핳해핡핮해합핮핯핰핬핥 하드 포크 픿픿에서 새로 추가될 핃핒핅핁핔핅픲를 이용하여 단순히 자식 체인에서 생성한 트랜잭션을 루트 체인에서 동일하게 실행한다면 누구나 Requestablecontract를 양 체인에 동일한 주소로 배포할 수 있다픮

    핃핒핅핁핔핅픲를이용하여컨트랙트를생성하는 핆핡핣해핯핲핹컨트랙트를루트체인에배포된 RootChaincontract와 동일한 주소를 가지게 하여 자식 체인의 핇핥핮핥핳합핳 블록에 넣어둔다면 위와같은 기능을수행할 수 있다픮

    2Vitalik Buterin. A note on data availability and erasure coding

    픱픶

  • 7 Conclusion

    핐핬핡핳항핡 핅핖핍은 Request픬 Request block픬 Requestable contract를통해일반화된상태를플라즈마체인에서 다룰 수 있게 하였다픮 챌린지는 항상 올바른 상태만이 루트체인에서 픜핡핮핬핺합핥될 수 있도록 보장한다픮 무엇보다 일반화된 플라즈마의 치명적인 취약점이었던 필핁문제를 핃핯핮해합핮핵핯핵핳 핒핥핢핡핳핥를통해 해결함으로써 어떠한 공격상황에서도 정직한 사용자들의 피해를 막을 수 있게 되었다픮 하지만 Rebase로 인한 핉핮핳해핡핮해 픜핮핡핬합해핹 보장 불가능과 같은 단점들은 여전히 해결해야 할 주요 과제이다픮

    픱픷

  • A Glossary

    A.1 General

    • 핒핯핯해 핣함핡합핮픺 핅해함핥핲핥핵항 핢핬핯핣핫핣함핡합핮

    • 핃함합핬핤 핣함핡합핮픺 핐핬핡핳항핡 핢핬핯핣핫핣함핡합핮픮 핉해 핣핡핮 핡핬핳핯 핢핥 핣핡핬핬핥핤 핰핬핡핳항핡 핣함핡합핮픮

    • 핏핰핥핲핡해핯핲픺 핁핧핥핮해 해함핡해 핯핰핥핲핡해핥 핣함합핬핤 핣함핡합핮

    • 핎핕핌핌 핁필필핒핅핓핓픺 0x00 핷합해함 핮핯핮핣핥 핡핮핤 핳합핧핮핡해핵핲핥 v = r = s = 0픬 핤핥핮핯해핥핤 NA

    • 핔핲핡핮핳핡핣해핯핲픺 핁핣핣핯핵핮해 핷함합핣함 핧핥핮핥핲핡해핥 해핲핡핮핳핡핣해합핯핮픬 tx.origin

    • 핒핯핯해핃함핡합핮 항핡핮핡핧핥핲 핣핯핮해핲핡핣해픺 핁 핰핬핡핳항핡 핣핯핮해핲핡핣해 핯핮 핲핯핯해 핣함핡합핮 핡핣핣핥핰해합핮핧 핥핮해핥핲 픯 핥핸합해 픨핅핔핈 픯핅핒핃픲픰픩

    • 핒핥핱핵핥핳해픺 핁 핲핥핱핵핥핳해 핷함합핣함 핥핮핦핯핲핣핥핳 해핯 핡핰핰핬핹 핳해핡해핥 해핲핡핮핳합해합핯핮 핢핹 핲핯핯해 핣함핡합핮

    • 핒핥핱핵핥핳해핡핢핬핥 핣핯핮해핲핡핣해픺 핃핯핮해핲핡핣해핳 핡핢핬핥 해핯 핡핣핣핥핰해 핥핸합해 픯 핥핮해핥핲 핲핥핱핵핥핳해 합핮 핢핯해함 핯핦 핲핯핯해 핡핮핤 핣함합핬핤핣함핡합핮픮 픲 합핤핥핮해합핣핡핬 핣핯핮해핲핡핣해핳 핳함핯핵핬핤 핢핥 핤핥핰핬핯핹핥핤 합핮 핲핯핯해 핡핮핤 핣함합핮핤 핣함핡합핮픬 핡핮핤 R 항핡핰핳 해핷핯핡핤핤핲핥핳핳핥핳픮

    • 핅핮해핥핲 핲핥핱핵핥핳해픺 핁 핲핥핱핵핥핳해 해핯 핥핮해핥핲 핳핯항핥해함합핮핧 핦핲핯항 핲핯핯해 핣함핡합핮 해핯 핣함합핬핤 핣함핡합핮픮 핥핧픩 핤핥핰핯핳합해 핡핳핳핥해픬항핯핶핥 핡핣핣핯핵핮해 핳해핯핲핡핧핥 핶핡핲합핡핢핬핥픮

    • 핅핸합해 핲핥핱핵핥핳해픺 핁 핲핥핱핵핥핳해 해핯 핥핸합해 핡핳핳핥해 핯핲 핡핣핣핯핵핮해 핳해핯핲핡핧핥 핦핲핯항 핣함합핬핤 핣함핡합핮 해핯 핲핯핯해 핣함핡합핮픮 핁핮핹핥핸합해 핲핥핱핵핥핳해 핯핮 핲핯핯해 핣함핡합핮 합항항핥핤합핡해핥핬핹 핵핰핤핡해핥핳 핡핣핣핯핵핮해 핳해핯핲핡핧핥 합핮 핣함합핬핤 핣함핡합핮픮 핉핦 해함핥 핵핰핤핡해핥 합핮핣함합핬핤 핣함핡합핮 합핳 핲핥핪핥핣해핥핤픨핔하 핲핥핶핥핲해핥핤픩픬 해함핥 핥핸합해 핣핡핮 핢핥 핣함핡핬핬핥핮핧핥핤 핷합해함 해함핥 핣핯항핰핵해핡해합핯핮 핯핵해핰핵해핯핦 해함핥 핵핰핤핡해핥 핡핳 핰핲핯핯핦픮

    • 핅핳핣핡핰핥 핲핥핱핵핥핳해픺 핁 핲핥핱핵핥핳해 해핯 핥핳핣핡핰핥 핦핲핯항 핣함합핬핤 핣함핡합핮픮 핉해 함핡핳 합핤핥핮해합핣핡핬 핳해핲핵핣해핵핲핥 해핯 핥핸합해 핲핥핱핵핥핳해픬핢핵해 해함핥핲핥 합핳 핲핥핳해핲합핣해합핯핮 핯핮 해함핥 핳핵핢항합핳핳합핯핮 해합항핥픮

    • 핕핮핤핯 핲핥핱핵핥핳해픺 핁 핲핥핱핵핥핳해 해핯 핰핲핥핶핥핮해핳 핦핵해핵핲핥 핥핮해핥핲 핲핥핱핵핥핳해 합핮 핣함합핬핤 핣함핡합핮 핦핲핯항 핢핥합핮핧 핡핰핰핬합핥핤픮

    • 핒핥핱핵핥핳해 핢핬핯핣핫픺 핁 핢핬핯핣핫 핡핰핰핬핹합핮핧 핳해핡해핥 해핲핡핮핳합해합핯핮 해함핡해 합핳 핥핮핦핯핲핣핥핤 핢핹 해함핥 핲핯핯해 핣함핡합핮픬 핤핥핮핯해핥핤RB

    • 핎핯핮픭핒핥핱핵핥핳해 핢핬핯핣핫픺 핁 핢핬핯핣핫 핷함핥핲핥 해핲핡핮핳핡핣해합핯핮핳 핡핲핥 핯핮핬핹 핲핥핬핡해핥핤 핢핥해핷핥핥핮 핡핣핣핯핵핮해핳 합핮 핣함합핬핤핣함핡합핮픬 핤핥핮핯해핥핤 NRB

    • 핒핥핱핵핥핳해 핢핬핯핣핫픺 핁 핲핥핱핵핥핳해 핢핬핯핣핫 핡핰핰핬핹합핮핧 핥핮해핥핲 픯 핥핸합해 핲핥핱핵핥핳해 핢핹 해함핥 핯핰핥핲핡해핯핲픬 핤핥핮핯해핥핤 RB

    • 핅핳핣핡핰핥 핲핥핱핵핥핳해 핢핬핯핣핫픺 핁 핲핥핱핵핥핳해 핢핬핯핣핫 핯핮핬핹 합핮핣핬핵핤합핮핧 핥핳핣핡핰핥 핲핥핱핵핥핳해핳 핡핮핤 핵핮핤핯 핲핥핱핵핥핳해핳픬핤핥핮핯해핥핤 EB

    • 핅핰핯핣함픺 핁 핰핥핲합핯핤 합핮 핷함합핣함 해함핥 핳핡항핥 핢핬핯핣핫 항핵핳해 핢핥 핳핵핢항합해해핥핤픮 핅핰핯핣함 핦핯핲 핥핡핣함 해핹핰핥 핯핦 핢핬핯핣핫 합핳핤핥핮핯해핥핤 핎핒핅픬 핏핒핅픬 핡핮핤 핅핒핅 핲핥핳핰핥핣해합핶핥핬핹픮

    픱픸

  • A.2 Challenge

    • 핎핵핬핬 핁핤핤핲핥핳핳 핃함핡핬핬핥핮핧핥픺 핣함핡핬핬핥핮핧핥 합핦 NRB 핣핯핮해핡합핮핳 핡 해핲핡핮핳핡핣해핯핮 핦핲핯항 NA픮

    • 핃핯항핰핵해핡해합핯핮 핃함핡핬핬핥핮핧핥픺 핣함핡핬핬핥핮핧핥 합핦 핢핬핯핣핫 함핡핶핥 해함핥 핳해핡해핥 핣핯항핰핵해핥핤 합핮 핡 핷핲핯핮핧 핷핡핹픮

    • 핅핸합해 핃함핡핬핬핥핮핧핥픺 핣함핡핬핬핥핮핧핥 합핦 합핮핶핡핬합핤 Exit request 핣핡핮핮핯해 핢핥 핡핣핣핥핰해핥핤 합핮 핣함합핬핤 핣함핡합핮 픨핢핵해 해함핥핲핥핱핵핥핳해 핳함핯핵핬핤 핢핥 합핮핣핬핵핤핥핤 합핮 RB픩픮

    • 핆합핮핡핬합핺핥핤픺 핅핶핥핲핹 핢핬핯핣핫 핡핮핤 Exit request 핣핡핮 핢핥 핤핥해핥핲항합핮합핳해합핣핡핬핬핹 픜핮핡핬합핺핥핤 핯핮핬핹 합핦 핡핮핹 핮핯핳핵핣핣핥핳핳핦핵핬 핣함핡핬핬핥핮핧핥 핥핸합핳해핳픮

    A.3 Continuous Rebase

    • 핒핥핢핡핳핥픺 핒핥픭항합핮합핮핧 핢핬핯핣핫핳 핢핡핳핥핤 핯핮 핡핮핯해함핥핲 핢핬핯핣핫픮 핁핳 핡 핲핥핳핵핬해픬 핳해핡해핥핒핯핯해 핡핮핤 핲핥핣핥합핰해핳핒핯핯해 핯핦핢핬핯핣핫핳 핣핡핮 핢핥 핣함핡핮핧핥핤 핢핵해 해핲핡핮핳핡핣해합핯핮핒핯핯해 핳함핯핵핬핤 핢핥 합핤핥핮해합핣핡핬 해핯 핯핲합핧합핮핡핬 핯핮핥픮

    • 핃핹핣핬핥픺 핔함핥 핥핮해합핲핥 핯핰핥핲핡해합핯핮핡핬 핰핥핲합핯핤 핯핦 해함핥 핐핬핡핳항핡 핅핖핍픬 핯핮핥 핣핹핣핬핥 핣핯핮핳합핳해핳 핯핦 핡 해핯해핡핬 핯핦 핦핯핵핲핳해핡핧핥핳픮 핅핡핣함 핳해핡핧핥 합핳 핐핲핥픭핣핯항항합해픬 필핁픭핣함핥핣핫픬 핃핯항항합해 핡핮핤 핃함핡핬핬핥핮핧핥픮

    • 핐핲핥픭핣핯항항합해픺 핁 핳해핡핧핥 해함핡해 핯핰핥핲핡해핯핲 항합핮핥핳 핢핬핯핣핫핳 합핮 핣함합핬핤 핣함핡합핮 핡핮핤 핳핵핢항합해핳 transactionRoot 핯핦해함핥항픮 핁해 해함핥 핳핡항핥 해합항핥픬 해함핥 핯핰핥핲핡해핯핲 항핵핳해 핢핲핯핡핤핣핡핳해 핢핬핯핣핫 핤핡해핡 해핯 핵핳핥핲핳 핳핯 해함핡해 해함핥핹 핣핡핮핣함핥핣핫 핤핡해핡 핡핶핡합핬핡핢합핬합해핹픮

    • 필핁픭핣함핥핣핫픺 핁 핳해핡핧핥 해함핡해 핵핳핥핲핳 핣함핥핣핫 핤핡해핡 핡핶핡합핬핡핢합핬합해핹 핯핦 핢핬핯핣핫핳 핳핵핢항합해해핥핤 합핮 핐핲핥픭핣핯항항합해픮 핉핮핣핡핳핥 핯핦 핵핮핡핶핡합핬핡핢합핬합해핹픬 해함핥핹 핣핡핮 핳핵핢항합해 Escape request 해핯 핥핳핣핡핰핥 핦핲핯항 해함핡해 핣함핡합핮픮 핈핯핷핥핶핥핲픬Escape request 핣핡핮 핢핥 핳핵핢항합해해핥핤 핡해 핢핯해함 핐핲핥픭핣핯항항합해픬 필핁픭핣함핥핣핫 핳해핡핧핥핳픮

    • 핃핯항항합해픺 핁 핳해핡핧핥 해함핡해 핯핰핥핲핡해핯핲 항핵핳해 핳핵핢항합해 Escape request block 핡핰핰핬핹합핮핧 Escape request 핡핮핤핤핯 Rebase 핢핬핯핣핫핳 핳핵핢항합해해핥핤 합핮 핐핲핥픭핣핯항항합해픮

    • 핃함핡핬핬핥핮핧핥픺 핁 핳해핡핧핥 해함핡해 핵핳핥핲핳 핣핡핮 핣함핡핬핬핥핮핧핥 합핦 핢핬핯핣핫핳 핳핵핢항합해해핥핤 합핮 핃핯항항합해 핡핲핥 합핮핶핡핬합핤픮

    • 핓해핡핧핥 핬핥핮핧해함픺 핔함핥 핮핵항핢핥핲 핯핦 Epoch 해핯 핢핥 핰핲핯핣핥핳핳핥핤 합핮 Pre-commit 핡핮핤 Commit픮

    • 핓해핡핧핥 핰핥핲합핯핤픺 핔함핥 해합항핥 핡핬핬핯핣핡해핥핤 핦핯핲 핥핡핣함 Stage픮

    • 핈핡핬해합핮핧 핣핯핮핤합해합핯핮픺 핁 핳핰핥핣합픜핣 핣핯핮핤합해합핯핮 해핯 함핡핬해 핣함합핬핤 핣함핡합핮픮

    • 핆합핮핡핬합핺핥픺 핁핦해핥핲 핃함핡핬핬핥핮핧핥 핳해핡핧핥픬 핷함핯핬핥 핢핬핯핣핫핳 합핮 핡 핣핹핣핬핥 핣핡핮 핢핥 픜핮핡핬합핺핥핤픮

    • 핓함핵해핤핯핷핮픺 핁 핣핬핯핳합핮핧 핰핲핯핣핥핤핵핲핥 핯핦 핰핬핡핳항핡 핣함핡합핮픮 핁핦해핥핲 핳함핵해핤핯핷핮픬 핮핯 항핯핲핥 핣핹핣핬핥 핣핡핮핮핯해 핢핥합핮합해합핡해핥핤픮 핉해 핯핮핬핹 핡핬핬핯핷핳 핵핳핥핲핳 해핯 핥핳핣핡핰핥 핦핲핯항 해함핡해 핣함핡합핮픮

    픱픹

  • B Requestable Contract Examples

    B.1 Requestable token contract

    픯픯 핀핎핏핔핅픺 핔함합핳 합항핰핬핥항핥핮해핳 핯핮핬핹 핥핮해핥 핲 핡핮핤 핥 핸 합 해 핲 핥핱핵핥 핳 해 핳 픮핣핯핮해 핲핡핣 해 핒핥핱핵핥핳해핡핢핬핥핓합항핰핬핥핔핯핫핥핮 합 핳 핏핷핮핡핢핬핥 픬 핒핥핱핵핥핳해핡핢 핬핥 핉 핻

    핵핳 합핮핧 핓핡핦핥핍핡해함 핦 핯 핲 ∗ 픻

    픯픯 할 핯핷핮핥핲 할 합 핳 핳 해 핯 핲 핥핤 핡해 핢핹해핥핳픳픲 픨픰 픩 픮픯픯 핡핤핤핲핥핳핳 핯핷핮핥핲 픻 핦핲핯항 핏핷핮핡핢핬핥

    픯픯 할 해핯해핡 핬핓핵핰핰핬핹 할 합 핳 핳 해 핯 핲 핥핤 핡해 핢핹해핥핳픳픲 픨픱 픩 픮핵 합핮해 핰핵핢 핬 합 핣 해핯 해핡 핬핓핵핰핰 핬핹 픻

    픯픯 할 핢핡 핬핡핮핣핥핳 핛 핡핤핤핲 핝 할 합 핳 핳 해핯 핲 핥핤 핡해 핫핥핣핣핡핫픲픵픶 픨 핢핹해핥핳픳픲 픨 핡핤핤핲 픩 픬 핢핹해핥핳픳픲 픨픲 픩 픩픮

    항핡핰핰합핮핧 픨 핡핤핤핲핥핳핳 픽픾 핵합핮해 픩 핰핵핢 핬 합 핣 핢핡 핬핡핮핣핥핳 픻

    픯픯 핲 핥핱핵핥 핳 해 핳항핡핰핰합핮핧 픨 핵 합핮해 픽픾 핢핯핯핬 픩 핡핰핰 핬 합 핥핤핒핥핱핵핥핳해 핳 픻

    픯∗ 핅핶핥핮해핳 ∗픯핥핶핥핮해 핔핲핡핮핳 핦핥 핲 픨 핡핤핤핲핥핳핳 핟핦핲핯항 픬 핡핤핤핲핥핳핳 핟해핯 픬 핵 합핮해 핟핶핡핬핵핥 픩 픻핥핶핥핮해 핍합핮해 픨 핡핤핤핲핥핳핳 핟해핯 픬 핵 합핮해 핟핶핡핬핵핥 픩 픻핥핶핥핮해 핒핥핱핵핥핳해 픨 핢핯핯핬 핟합핳핅핸합해 픬 핡핤핤핲핥핳핳 핟핲핥핱핵핥핳해핯핲 픬 핢핹해핥핳픳픲 핟해핲합핥핋핥핹 픬

    핢핹해핥핳 핟해핲 합핥핖핡핬핵핥 픩 픻

    핦 핵핮핣 해 합 핯핮 해 핲 핡 핮 핳 핦 핥 핲 픨 핡핤핤핲핥핳핳 핟해핯 픬 핵 합핮해 핟핶핡핬핵핥 픩 핰핵핢 핬 합 핣 핻핢핡 핬핡핮핣핥핳 핛 항핳핧 픮 핳핥핮핤핥핲 핝 픽 핢핡 핬핡핮핣핥핳 핛 항핳핧 픮 핳핥핮핤핥핲 핝 픮 핳핵핢 픨 핟핶핡핬핵핥 픩 픻핢핡 핬핡핮핣핥핳 핛 핟해핯 핝 픽 핢핡 핬핡핮핣핥핳 핛 핟해핯 핝 픮 핡핤핤 픨 핟핶핡핬핵핥 픩 픻

    핥항합해 핔핲핡핮핳 핦핥 핲 픨항핳핧 픮 핳핥핮핤핥핲 픬 핟해핯 픬 핟핶핡핬핵핥 픩 픻핽

    핦핵핮핣 해 합 핯핮 항합핮해 픨 핡핤핤핲핥핳핳 핟해핯 픬 핵 합핮해 핟핶핡핬핵핥 픩 핰핵핢 핬 합 핣 핯핮핬핹핏핷핮핥핲 핻해핯해핡 핬핓핵핰핰 핬핹 픽 해핯해핡 핬핓핵핰핰 핬핹 픮 핡핤핤 픨 핟핶핡핬핵핥 픩 픻핢핡 핬핡핮핣핥핳 핛 핟해핯 핝 픽 핢핡 핬핡핮핣핥핳 핛 핟해핯 핝 픮 핡핤핤 픨 핟핶핡핬핵핥 픩 픻

    핥항합해 핍합핮해 픨핟해핯 픬 핟핶핡핬핵핥 픩 픻핥항합해 핔핲핡핮핳 핦핥 핲 픨픰 핸픰픰 픬 핟해핯 픬 핟핶핡핬핵핥 픩 픻

    픲픰

  • 픯픯 핕핳핥핲 핣핡핮 핧핥해 해함핥 해 핲 합 핥 핫핥핹 핯 핦 핯핮핥 픧 핳 핢핡 핬핡핮핣핥 핡핮핤 항핡핫핥 핡핮 핥핮해핥 핲핲 핥핱핵핥 핳 해 핤 합 핲 핥 핣 해 핬 핹 픮

    핦 핵핮핣 해 합 핯핮 핧핥해핂핡핬핡핮핣핥핔핲합핥핋핥핹 픨 핡핤핤핲핥핳핳 핷함핯픩 핰핵핢 핬 합 핣 핰핵핲핥 핲 핥 해핵 핲핮 핳 픨 핢핹해핥핳픳픲 픩핻

    핲핥 해핵핲핮 핫핥핣핣핡핫픲픵픶 픨 핢핹해핥핳픳픲 픨핷함핯픩 픬 핢핹해핥핳픳픲 픨픲 픩 픩 픻핽

    핦핵핮핣 해 합 핯핮 핡핰핰핬핹핒핥핱핵핥핳해핉핮핒핯핯해핃함핡합핮 픨핢핯핯핬 합 핳핅핸 합 해 픬핵 합핮해픲픵픶 핲핥핱핵핥핳해 핉핤 픬핡핤핤핲핥핳핳 핲핥핱핵핥핳 해핯핲 픬핢핹해핥핳픳픲 해핲 합핥핋핥핹 픬핢핹해핥핳 해 핲 합 핥핖핡 핬핵핥

    픩 핥핸 해 핥 핲핮핡 핬 핲 핥 해핵 핲핮 핳 픨 핢핯핯핬 핳핵 핣 핣 핥 핳 핳 픩 핻픯픯 핔핏필핏픺 핡핤핰핯해 핒핯핯해핃함핡합핮픯픯 핲 핥 핱핵 합 핲 핥 픨항핳핧 픮 핳핥핮핤핥핲 픽픽 핡핤핤핲핥핳핳 픨 핲핯핯해핣함핡 합핮 픩 픩 픻픯픯 핲 핥 핱핵 합 핲 핥 픨 픡 핧핥해핒핥핱핵핥핳해핁핰핰핬 합핥핤 픨 핲 핥핱핵핥 핳 해 핉핤 픩 픩 픻 픯픯 핣함핥핣핫 핤핯핵핢핬핥 핡핰핰핬핹 합핮핧

    핲 핥 핱핵 합 핲 핥 픨 픡 핡핰핰 핬 합 핥핤핒핥핱핵핥핳해 핳 핛 핲 핥핱핵핥 핳 해 핉핤 핝 픩 픻

    합 핦 픨 합 핳핅핸 합 해 픩 핻픯픯 핥 핸 합 해 항핵핳해 핢핥 핦 합 핮 핡 핬 합 핺 핥 핤 픮픯픯 핔핏필핏픺 핡핤핰핯해 핒핯핯해핃함핡합핮픯픯 핲 핥 핱핵 합 핲 핥 픨 핲핯핯해핣함핡 합핮 픮 핧 핥 해핅핸 합 해핆 합핮핡 핬 합 핺 핥핤 픨 핲 핥핱핵핥 핳 해 핉핤 픩 픩 픻

    합 핦 픨 핢핹해핥핳픳픲 픨픰 픩 픽픽 해핲 합핥핋핥핹 픩 핻픯픯 핯핮핬핹 핯핷핮핥핲 픨 합핮 핣함 합 핬 핤 핣함핡합핮 픩 핣핡핮 핥 핸 합 해 할 핯핷핮핥핲 할 핶 핡 핲 합 핡 핢 핬 핥 픮픯픯 핢핵해 합 해 합 핳 핣함핥핣핫핥핤 합핮 핡핰핰핬핹핒핥핱핵핥핳해핉핮핃함합핬핤핃함핡합핮 핡핮핤

    핥핸 합 해핃함