___  ___    _ _    _  _ _____   _____
 / __|/ _ \  | | |  | || |_ _\ \ / / __|
| (_ | (_) | |_  _| | __ || | \ V /| _|
 \___|\___/    |_|  |_||_|___| \_/ |___|

 --- A GOPHER-LIKE INTERFACE FOR HIVE BLOCKCHAIN ---

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

BY: @dlgusdn616 | CREATED: June 12, 2018, 2:18 a.m. | VOTES: 4 | PAYOUT: $0.00 | [ VOTE ]

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

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

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

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

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

> gaslimit이 800만이라고 할 때, for (i = 0; i < 2000; i++) trasnfer를 실행하게 된다면? 퍼블릭 이더리움에서 해당 알고리즘의 실행은 실행 도중 비정상적으로 중단될 수밖에 없다.
따라서 얼마나 많은 gas를 소모하는지를 측정하는 가스복잡도의 관점에서 컨트랙트 코드를 분석하고 활용할 필요가 있다.
* solidity optimizer란 무엇인가?
> Answer:
* ICO트릴레마에 대해서 설명하라
> Answer:
ICO를 진행함에 있어 토큰의 총 발행량 | 토큰의 가격 | 토큰의 사후적 분배율, 이 3가지 항목이 동시에 고정될 수 없는 것을 의미한다.
Reference: https://medium.com/@kevin.j

> 첫째: 해당 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

압도적인 해시량을 바탕으로 특정 시점부터 체인을 분기시킬 수도 있고, 자기 입맛대로 거래내역을 추가하는 공격도 할 수 있다. 체인 분기 공격이 사실상 가장 피해가 큰 공격유형이며, 네트워크 가치를 하락시킴으로써 코인 생태계 자체를 무너뜨릴 수 있는 공격이다.
* PoW 가 아닌 합의 알고리즘은 어떤 것들이 있는가? Casper FFG, DPoS, Tendermint, 혹은 그 밖의 알고리즘을 설명하라.
> Answer:

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

> 그러나 만약 메모리 관련 연산이 급격히 빨라지는 기술 발전이 이루어진다면, 이더리움의 PoW 또한 효력을 상실하게 될 것이다.
* 이더리움의 GHOST Protocol 방식과 비트코인의 블록 생성방식 간의 차이점을 설명하라.
> Answer:
비트코인의 경우 체인이 분기되면서 유효하지 않은 블록이 되어버린 실효(stale)블록에 대해서 따로 보상을 해주지 않는다. 그러나 이더리움에서는 Stale블록이 된 경우에도 보상을 해주는데, 이때의 실효블록을 이더리움에서는 uncleBlock이라 한다.

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

> 비트코인의 경우 애초에 분기되는 상황이 그리 자주 발생하지 않기 때문에 보상에 대한 매커니즘을 특별히 고려하지 않았던 것이고, 이더리움의 경우 블록 생성시간이 빠르기 때문에 분기가 자주 발생하고 그로 인해 손해를 보는 채굴자들이 네트워크를 떠나지 않게끔 보상정책이 필요했던 것이다.
* Casepr는 51% 공격 문제를 어떻게 해결할 것인지에 대해서 PoW 체인의 경우와 비교하여 설명하라.
> Answer:

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

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

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

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

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

TAGS: [ #onther ] [ #ethereum ] [ #blockchain ]

Replies

NO REPLIES FOUND.

[ BACK TO TRENDING ] [ BACK TO MENU ]
CMD>