이더리움 블록체인 R&D스타트업 온더 채용 Cheat Sheet

in #onther7 years ago (edited)

Onther 채용 시험지 Cheat Sheet (작성 중)

작성 계기: 이더리움을 공부하는 사람으로서 아래와 같은 질문들에 답을 하면서 그 동안 공부했던 내용을 정리하고, 몰랐던 내용이 있다면 연구해서 보충하고 싶다는 취지로 작성하게 됐다.

  • ETC를 ETH메인넷의 ERC20주소로 보내버렸다. 복구할 방법이 있는가? 단 ERC20주소를 만든 개인키는 잃어버리지 않았다.

Answer:
거래소가 사용자에게 부여한 지갑 주소는 EA주소가 아닌 컨트랙트 주소다. 그리고 컨트랙트 주소는 생성되는 규칙과 방식이 정해져 있다. 그리고 이더리움과 이더리움 클래식은 동일한 주소 생성 규칙을 가지고 있기 때문에, 만약 이더 클래식을 이더리움 메인넷의 ERC20 컨트랙트 주소로 잘못 입금했다면, 동일한 방식으로 이더리움 클래식 네트워크에서 컨트랙트 주소를 만들어 돌려받은 다음 오입금한 사용자에게 돌려주면 된다.
Reference: https://medium.com/@kevin.j

  • solidity의 keccak함수의 연산은 EVM의 스택머신에서 이뤄질까? 그렇다면 혹은 그렇지 않다면 이유는 무엇인가?

Answer:

  • 0x60 옵코드는 어떤 명령인가?

Answer:
Push1

  • EA가 CA한테 이더를 보냈다. CA의 balance와 storageRoot는 모두 바뀐다. 참일까 거짓일까? 그 이유는? 단 CA 코드에 msg.value를 사용하는 부분은 없다.

Answer:

  • 옐로우페이퍼에 적힌 트랜잭션 value가 표현할 수 있는 값의 최대 범위는? 근거가 되는 수식 번호와 옐로우페이퍼 커밋 해시를 적어라.

Answer:

  • EVM옵코드 중 JUMP와 JUMPDEST의 차이와 역할에 대해서 기술하라

Answer:

  • 모든 거래내역이 공개되어 있음에도 불구하고, 해커가 비트코인을 훔쳐갔을 때 추적하기 어려운 이유는?

Answer:
비트코인 시스템에서 계정을 생성할 때는 실세계에 있는 어떠한 정보도 필요가 없다. 따라서 공개된 거래내역이 있어도, 결국 거래내역에 존재하는 건 해커의 address 이외의 어떠한 정보도 없다.

해커가 특정 풀노드에 지속적으로 의존하는 등의 패턴을 보이지 않는 이상 IP추적 등의 방법 또한 어렵다. 그리고 만약 해커가 훔쳐간 비트코인을 모네로, 지캐시 등의 익명 코인으로 변환하여 과정을 꼬아버린다면 추적은 사실상 불가능하다.

  • 마이닝 노드가 20개, 풀노드가 10개인 프라이빗 네트워크가 있다. tx 2개가 생성되어 블록에 포함되었을 때, 생성되는 EVM의 갯수와 그 이유는?

Answer:

  • payable모디파이어에 대해서 설명하라. 그리고 payable모디파이어가 없는 ICO컨트랙트는 만들어 질 수 있을까? 있다면 그 이유는 무엇인가?

Answer:

  • 전체 토큰의 전송을 멈출 수 있는 transfer pause 기능은 블록체인의 위변조불가능한 특성을 위배하는가? 그렇다면 혹은 그렇지 않다면 그 이유는?

Answer:
토큰의 전송을 멈춘다고 해서 블록체인에 저장되어 있는 거래 내역이 위변조되는 건 아니다. 멈추기 이전까지의 정보는 이미 블록체인상에 기록되어 있을 것이기 때문이다.

  • 플라즈마 체인의 challenge과정에 대해서 서술하라

Answer:

  • 플라즈마 체인의 합의 알고리즘과 exit 프로세스의 관계에 대해서 서술하라

Answer:

  • truffle migrate, truffle compile, truffle test 각각의 명령어는 어떤 일을 하는가?

Answer:
migrate: 이 명령어를 통해 스마트 컨트랙트를 네트워크에 배포한다. 만약 complie과정을 진행하지 않았다면, contracts 폴더 내의 솔리디티로 작성되어 있는 컨트랙트 소스코드들을 컴파일하는 것부터 시작한다.

compile: contracts 폴더 내의 솔리디티로 작성되어 있는 컨트랙트 소스코드들을 컴파일한다. 두번째 컴파일부터는 변경된 이력이 있는 컨트랙트 소스코드에 대해서만 컴파일이 진행된다.

test: test 폴더내에 .sol, .js 파일들을 컴파일 후 유닛테스팅을 진행한다. (Answerd by 수지아빠: http://javaexpert.tistory.com)

  • github에 solidity코드가 알록달록하게 보이기 위해서는(linter) 어떤 조치를 해야할까?

Answer:

  • 이더리움 계정 생성간 뉴모닉 단어를 이용할 수 있다. 뉴모닉이 만들 수 있는 계정 갯수의 한도는 있는가? 그렇다면 혹은 그렇지 않다면 그 이유는?

Answer:

Answer:

  • 솔리디티 Proxy Pattern에 대해서 설명하라

Answer:

  • call, delegate call, static call의 차이에 대해서 설명하라

Answer:

  • solidity와 vyper의 차이점과 장단점에 대해서 설명하라

Answer:

  • O(n)의 시간복잡도를 가진 알고리즘은 퍼블릭 이더리움에서 동작 가능할까? 가능하다면 혹은 가능하지 않다면 그 이유는?

Answer:
어떤 내용을 가지고 있느냐에 따라 실행가능 여부가 달라진다. 예를 들어, transfer를 생각해보자. 이 메서드는 한 번의 실행 당 21,000가스를 소모한다.

gaslimit이 800만이라고 할 때, for (i = 0; i < 2000; i++) trasnfer를 실행하게 된다면? 퍼블릭 이더리움에서 해당 알고리즘의 실행은 실행 도중 비정상적으로 중단될 수밖에 없다.
따라서 얼마나 많은 gas를 소모하는지를 측정하는 가스복잡도의 관점에서 컨트랙트 코드를 분석하고 활용할 필요가 있다.

  • solidity optimizer란 무엇인가?

Answer:

  • ICO트릴레마에 대해서 설명하라

Answer:
ICO를 진행함에 있어 토큰의 총 발행량 | 토큰의 가격 | 토큰의 사후적 분배율, 이 3가지 항목이 동시에 고정될 수 없는 것을 의미한다.
Reference: https://medium.com/@kevin.j

  • PoA 합의 알고리즘에서 validator를 변경할 수 있는가? 이유는 무엇인가?

Answer:

  • 토큰의 분류 중 Work Token의 개념을 설명하고 Work token의 경우 토큰의 이상적인 형태는 무엇인가? 그 예(2가지 이상)는 무엇이 있을까?

Answer:

  • puppeth를 이용해 여러개의 Bootnode를 갖고 있는 프라이빗 네트워크를 운영할 수 있는가? 이유는 무엇인가?

Answer:

  • puppeth를 이용해 프라이빗 네트워크를 구축하기 위해 필요한 준비사항을 모두 적으시오

Answer:

  • solidity에서 함수 인자로 전달된 파라미터 a를 함수 내부에서 소괄호로 감쌌다. eq) (a) 무슨 의미인가?

Answer:

  • 비트코인의 블럭, TX 구조를 간략히 설명하고, UTXO 를 사용 / 검증하기 위한 과정을 설명하라

Answer:
비트코인의 블록은 크게 블록헤더와 트랜잭션들로 구성되어 있다. 실제로 트랜잭션들은 블록 내에 1차원 vector로 저장되어 있다.
UTXO를 사용하기 위해서는

첫째: 해당 UTXO의 scriptPubKey에 OP_DUP << OP_HASH160 << hash160 << OP_EQUALVERIFY << OP_CHECKSIG 중 hash160에 자신의 주소가 포함되어 있어야 한다.

둘째: scriptPubKey 스크립트를 실행하여 마지막에 true가 반환될 수 있다면, 즉 자신이 서명 정보를 통해 스크립트를 증명할 수 있어야 한다. 물론 사용하기 전에, 사용하려는 output value보다 더 많은 input value가 있어야 되는 것은 물론이다.

결국 자신의 주소로 할당된 UTXO의 value가 사용할 value보다 커야하며 사용할 때는 input으로 들어 온 scriptPubKey를 실행하면 되는 것이고, 전송할 때는 수신자의 주소를 기반으로 scriptPubKey를 생성하고 거래를 네트워크 상에 배포하면 된다.

  • 블록체인의 중요 요소는 해쉬함수와 머클 트리이다. 해쉬 함수를 사용하는 것의 의미(해쉬 함수의 특성)을 설명하고, 머클 트리, 머클 path 를 설명하라.

Answer:
해시함수는 input에 매핑되는 고유한 output을 만들어내는 함수다. 머클 트리는 이 해시함수의 특성을 아주 잘 이용한 자료구조 중 하나로, 이진 트리에 해시 개념을 도입한 자료구조다.

Transcation이 여러 개 있을 때, 이 트랜잭션들을 리프노드로 두고 두개씩 묶어서 해시하고 해시된 값들을 또 두개씩 묶어 해시하는 과정을 반복하면서 루트까지 거슬러 올라간다. 이렇게 해시의 해시들로 구성되어 결국 루트까지 갔을 때, 그 루트를 머클루트라 한다. 리프 노드에 해당하는 거래내역이 하나라도 변조된다면 머클 루트값이 변하게 되는 원리는 바로 이 때문이다.

머클 path는 머클 트리의 장점이다. 특정 트랜잭션의 위변조 여부를 알고 싶을 때, 머클 트리내에 해당 트랜잭션과 관련된 해시만 따로 추출하게 되는데 이 때의 관련 해시들을 Merkle Branch라고 하며 이 Branch가 곧 path라고 할 수 있다.

코드 수준에서의 자세한 내용은 아래의 레퍼런스를 참조
Reference: https://steemit.com/bitcoin/@dlgusdn616/bitcoin01-01

  • 2세대 블록체인이라 불리는 이더리움과 비트코인의 구조적인 차이를 설명하라.

Answer: (by HeuristicWave)
비트코인의 블록헤더는 이전 블록 헤더의 해시, 타임스탬프, 난이도, 넌스, 머클트리의 루트해시를 가지고 있지만, 이더리움의 블록헤더는 이전블록 헤더의 해시, 타임스탬프, 넌스, 난이도, 가스의 사용량, 상태 루트, 트랜잭션 루트, 리시트루트를 가지고 있다.

  • 비트코인, 이더리움, 혹은 그 밖의 블록체인들의 현존하는 스케일링 솔루션을 제시하고 어떤 방식으로 구현하려는지 설명하라.

Answer:

  • PoW 에서 일어날 수 있는 공격 방식을 제시하라.

Answer:
전체 Hash Power(연산량)의 51% 이상을 차지했을 때, 해당 해시파워를 가지고 있는 노드는 다음 블록을 생성할 수 있는 확률이 50%가 된다. 따라서 연산량을 압도적으로 높여서 독점하게 되면 사실상 블록을 검증하고 블록체인에 추가해나가는 작업을 임의의 노드가 통제할 수 있고, 여기서 공격이 발생할 수 있다.

압도적인 해시량을 바탕으로 특정 시점부터 체인을 분기시킬 수도 있고, 자기 입맛대로 거래내역을 추가하는 공격도 할 수 있다. 체인 분기 공격이 사실상 가장 피해가 큰 공격유형이며, 네트워크 가치를 하락시킴으로써 코인 생태계 자체를 무너뜨릴 수 있는 공격이다.

  • PoW 가 아닌 합의 알고리즘은 어떤 것들이 있는가? Casper FFG, DPoS, Tendermint, 혹은 그 밖의 알고리즘을 설명하라.

Answer:

  • Whisper, Swarm, IPFS, Infura, Gnosis, Aragon, Metamask, Golem, 혹은 그 밖의 이더리움 생태계에 기여하는 프로젝트를 설명하라.

Answer:

  • EA a 와 b 의 balance 가 각각 n_a, n_b 일 때, a 의 모든 잔액을 b 에게 보냈다. gas price 를 g_p 라고 한다면, b 의 밸런스는 n_b + α 이다. 이 때 α 는?

Answer:
n_a - g_p; EA a가 자신의 모든 잔액 n_a를 보낼 때는 트랜잭션 실행을 위한 gas price g_p가 필연적으로 동반된다. 따라서 온전히 n_a는 보낼 수 없으며 gas price g_p를 차감한 잔액을 전송하게 된다.

  • swarm ls 명령어를 실행하기 위해 필요한 값은 어떤것이 있는지 설명하시오

Answer:

  • 상호 독립적인 토큰이 서로 교환되는 Atomic Swap 방식에 대해 설명하고, Plasma Fast Withdrawl 절차에서의 Atomic Swap 방식을 설명하라.

Answer:

  • Casper FFG가 어떻게 이더리움 블록체인의 확장성 문제를 해결할 수 있는지 근거를 제시하라.
    Answer:

  • 이더리움 블록체인에 대해서 Oracle이 갖는 의미를 설명하고 Oracle Problem에 대해 설명하라.

Answer:

  • Ethash 기반의 이더리움 PoW 체인은 비트코인 PoW 체인보다 어떤 비교우위가 있는지 설명하고 그 한계를 제시하라.

Answer:
이더리움의 PoW체인은 합의 엔진인 이대시(Ethash)에 구현되어 있다. 이대시의 경우 비트코인에 비해 가지는 장점은 ASIC 채굴기가 큰 영향을 발휘하지 못한다는 것이다. 비트코인에서는 연산량만 고려하면 되기 때문에, ASIC을 대량으로 가지고 있는 노드가 네트워크 생태계 자체를 독점할 수 있지만 이더리움에서는 기존의 PoW연산에 메모리 관련 연산을 추가했다.

단순히 SHA256 연산만을 필요로했던 비트코인과는 달리 이더리움은 DAG를 통해 미리 알 수 없는, 할 수 없는 순차적 메모리 연산을 요구하여 ASIC제작을 어렵게 했다. 메모리를 읽고 쓰는 부분에서의 기술 발전은 아직까지 속도가 그리 빠르지 않기 때문에 충분히 효과가 있다.

그러나 만약 메모리 관련 연산이 급격히 빨라지는 기술 발전이 이루어진다면, 이더리움의 PoW 또한 효력을 상실하게 될 것이다.

  • 이더리움의 GHOST Protocol 방식과 비트코인의 블록 생성방식 간의 차이점을 설명하라.

Answer:
비트코인의 경우 체인이 분기되면서 유효하지 않은 블록이 되어버린 실효(stale)블록에 대해서 따로 보상을 해주지 않는다. 그러나 이더리움에서는 Stale블록이 된 경우에도 보상을 해주는데, 이때의 실효블록을 이더리움에서는 uncleBlock이라 한다.

uncleBlock을 생성한 사람에게도 보상이 주어지고, uncleBlock을 제보하는 행위에 대해서도 보상이 주어진다. 이러한 프로토콜을 GHOST Protocol이라 하며 이더리움의 경우 블록 생성시간이 비트코인에 비해 약 40배빠르기 때문에, 체인이 분기되는 상황이 자주 연출될 수 있다. 이러한 배경 때문에 이더리움에서는 GHOST 프로토콜을 개발했다.

비트코인의 경우 애초에 분기되는 상황이 그리 자주 발생하지 않기 때문에 보상에 대한 매커니즘을 특별히 고려하지 않았던 것이고, 이더리움의 경우 블록 생성시간이 빠르기 때문에 분기가 자주 발생하고 그로 인해 손해를 보는 채굴자들이 네트워크를 떠나지 않게끔 보상정책이 필요했던 것이다.

  • Casepr는 51% 공격 문제를 어떻게 해결할 것인지에 대해서 PoW 체인의 경우와 비교하여 설명하라.

Answer:

  • Casper는 전통적인 PoS 알고리즘의 Nothing at Stake 문제를 어떻게 해결하려고 하는지 설명하라. (최소삭감조건을 명시하시오)

Answer: (by Bookstore3)
Nothing at stake 문제란 이더리움에서 블록체인이 포크가 될 때 발생하는 문제다. 기존 PoS 알고리즘 상에서는 포크가 발생하여 노드가 투표를 할 때, 나눠진 두 블록체인에 모두 투표를 해도 손해를 보게 되는 구조가 아니였다. 결국 둘 다 투표를 해 네트워크가 채택한 블록체인에 대한 보상만 챙기면 되는 구조였다.

이런 문제를 해결하기 위해 Casper에서는 투표를 하는 노드들이 본인의 지분, 즉 돈을 걸고 투표를 하게 만들고, 만약 본인이 악의적으로 투표를 두 체인에 모두 하게 되면 돈을 잃게 되는 알고리즘을 사용한다. 즉, 투표를 잘 못 해도 상관은 없지만, 이중 투표는 방지하겠다는 것이다. 참고로 이런 투표한 사실은 투표를 할 때 본인 키로 서명을 하므로 쉽게 알아낼 수 있다.

그렇다면 여기서 어떻게 본인이 투표를 한 체인이 정직한지 알 수 있을까.

Capser는 블록체인에 Checkpoint라는 지점을 정해놓는다. 해서 각 50번째 블록마다 Checkpoint가 있다면 이런 Checkpoint가 유효한지 투표를 한다. 그럼 투표 노드의 2/3이 인정을 하면 유효한 투표가 되고 그 블록은 일단 Justified가 된다. 그런 다음 다음번 Checkpoint 블록이 다음번 투표를 통해 Justified가 되면, 처음 Justified가 되었던 블록은 Finalized가 되어 완전히 유효한 블록체인이 된다.

즉, 이 Finalized와 Justified 블록들을 잘 따라가며 투표를 하면 의도치 않게 악의적인 블록체인에 투표를 하는 것을 방지할 수 있다.

마지막으로 이 Checkpoint가 50번째 블록마다 라고 해서 매우 긴 시간이라 생각할 수 있을지 모르지만, 이더리움은 한 블록이 약 15초에 생성된다는 것을 고려하면 그렇게 긴 시간이 아니다.

  • Token Economy의 가치 확보 문제와 Token Velocity Problem을 연관지어 서술하세요.

Answer:

  • PoW에서 확보되지 않았던 경제적 완결성 개념이 무엇인지 설명하고, Casper는 이 문제를 어떻게 해결하려고 하는지 서술하세요.

Answer: