스마트 컨트랙트 - 정답

Lumi·2021년 12월 5일
1
post-thumbnail

이 부분에 대한 내용은 상당히 어렵다고 느껴서... 아는한에 대해서만 작성해 보겠습니다.

💡 비트코인은 왜 튜링 불완전성인가요? 스마트 컨트랙트가 포함된 이더리움은 왜 튜링 완전인가요?

이 부분에 대한 답변은 두가지 정도로 할 수 있다고 생각합니다.

첫번쨰는 필요가 없기 떄문입니다.

비트코인의 경우에는 단순히 더하기, 뺴기 연산만을 하기 떄문에 튜링 완전이어야 하는 이유가 없습니다.

반대로 이더리움은 다양한 스마트 컨트랙트를 구현하기 떄문에 튜링 완전이어야 합니다.

두번쨰는 보안상의 문제 입니다.

이더리움 같은 경우네는 채굴 보상으로 코인이 주어지지 않습니다.

  • 대신 트랜잭션 수수료가 주어 집니다

그러기 떄문에 반복문을 통한 공격에도 면역이 되어 있지만 반대로 비트코인의 경우에는

보상으로 코인이 주어지기 떄문에

  • 물론 수수료도 주어지지만 주 목적은 코인이라고 할 수가 있습니다.

반복문에 의한 공격이 가능합니다.

그러기 떄문에 튜링 불완전 언어를 사용하게 됩니다.

💡 하이퍼레저 패브릭에서 사용되는 체인링크와 이더리움에서 사용되는 솔리디티의 차이점은 무엇인가요?

체인 링크라는 용어를 체인 코드로 이해를 하여 대답을 해보겠습니다.

일단 두가지에는 스마트 컨트랙트를 관리한다는 면에서 공통점을 가지고 있습니다.

그리고 솔직하게 말해서 두가지의 차이점에 대해서는 어떠한 설명을 해야 할지를 모르겠습니다.

제가 알고 잇는 체인 코드는 일종의 스마트 컨트랙트를 관리하기 위한 패키지로 알고 있고 동시에 스마트 컨트랙트를 처리한다는 역할로 알고 있습니다.

💡 EVM은 무엇인가요? EOS VM은 무엇인가요? 두개의 차이점은 무엇인가요? 왜 JVM으로 만들어졌나요?

둘 모두 일단 VM 즉 가상머신을 말하며

EVM은 이더리움, EOS는 이오스에서 사용하는 VM을 말하는 것으로 알고 있습니다.

이러한 가상머신이 필요한 이유는 개발자마다 개발환경이 다르기 떄문입니다.

우리는 개발환경이 달라도 똑같은 결과같은 도출 해야 합니다.

예를 들면 미국에서 만드는 햄버거 재료와 한국에서 만드는 햄버거 재료는 원산지부터 다릅니다.

하지만 결과적으로는 만들어진 음식은 햄버거라고 통칭을 하기 떄문에 서로 햄버거로 인식을 하여 부르게 됩니다.

VM이 하는 역할이 이와 같습니다.

원산지가 달라도 결과적으로는 같은 결과를 보여주는 역할을 하게 됩니다.

JVM으로 만들어진 이유에 대한 의견은 저의 사견입니다.

JVM은 자바 가상 머신을 말합니다.

이는 바이트 코드를 읽을수 있는 장점이 있습니다.

EVM의 주 언어인 솔리디티의 경우에는 고급 언어이기 떄문에 EVM에서 읽을 수가 없습니다.

그러기 떄문에 우리는 바이트 코드로 변환하여 EVM으로 전송을 하게 되고 이후 EVM은 이를 opcode로 읽게 됩니다.

즉 EVM에서 바이트코드를 읽기 위해서 JVM으로 만들어 졌다고 생각을 하고 있습니다.

💡 Banchor 알고리즘이 무엇인가요? 왜 뱅코르 알고리즘이 있는데 유니스왑을 사용하나요?

간단합니다. 해킹을 당했기 떄문입니다.

뱅코르 알고리즘은 방코르라는 탈중앙화 거래소에서 사용하는 알고리즘으로 자산을 핫월렛이 아닌 스마트 컨트랙트에 보관함으로써 거래가 이루어지는 방식입니다.

하지만 해킹 사건이 있었고 이로 인해 자산을 동결을 하고 해결을 해나간 것으로 알고 있습니다.

하지만 이처럼 특정 자산을 동결하는 행위 자체가 탈중앙화에 어울리지 않는 행위이기 떄문에 사용하지 않는것으로 알고있습니다.

유니스왑의 경우에는 전적으로 사용자에게 처리를 맡기며 유동성 알고리즘 및 유동성 풀을 운용하기 떄문에 방코르 알고리즘보다 더 간단하고 사용자 친화적이라는 장점이 있습니다.

💡 이더리움의 Solidity 언어와 다르게, Go, C++을 사용하면 비결정적 문제가 생깁니다. 무슨 의미인가요?

이 부분에 대해서는 잘 모르겠습니다...ㅠ

💡 이더리움의 Solidity 언어는 어떤식으로 리소스에 대한 과금을 하나요?

이 부분에 대해서는 간단합니다.

얼마만큼의 많은 상태를 변형하였냐에 따라 달라집니다.

즉 많이 변화시킨만큼 많은 금액을 부과하게 됩니다.

💡 이더리움 스마트 컨트랙트에서는 왜 타이머나 이벤트를 사용할 수 없나요?

이 부분에 대해서는 잘 모르겠습니다...ㅠ

💡 여러 계약이 엮인 파일을 배포하려고 하면 무슨 일이 발생하나요?

이 부분에 대해서는 저의 사견입니다

어 실제로도 ERC-20, ERC-721토큰을 발행하려면 여러 계약이 엮여서 상속을 받은 상태로 배포가 되게 됩니다.

제가 스스로도 실습하면서 진행을 해보았지만 그냥 하나의 계약을 배포할경우와 별다른 차이점을 발견하지 못한 상태입니다...

단순히 여러 계약이 있기 떄문에 배포 메모리가 더 소요될수도 있다고는 생각하지만 그 외의 단점에 대해서는 아직 있다고 생각하지 못하고 있습니다.

💡 노드는 어떻게 스마트 컨트랙트 코드를 실행하나요?

스마트 컨트랙트는 트랜잭션을 통해서 유발이 되고 트랜잭션은 EOA라는 지갑에서 발생을 하게 됩니다.

그러면 EOA는 일종의 블록체인 생태계 외부의 지갑에서 트랜잭션을 보내서 생태계의 상태를 변형시키는 역할을 하게 되는데 이떄 블록체인 생태계에 들어갈떄의 창구 역할을 CA라는 지갑이 하게 됩니다.

예를들면

우리가 ATM기계에서 카드에 잇는 돈을 뺴내려고 할떄

카드를 EOA, ATM기계를 CA라고 이해를 하시면 될것 같습니다.

이렇게 트랜잭션이 전송이 되면 노드들은 트랜잭션을 받게 되고 이후 노드들 또한 CA를 통해서 트랜잭션을 유발 시켜 스마트 컨트랙트를 실행시키는 것으로 알고 있습니다.

원래 CA는 트랜잭션을 발생 시킬수 없습니다.

  • 하지만 여기서 말하는 트랜잭션은 외부에서 들어오는 트랜잭션을 말하며
  • CA가 발생시키는 트랜잭션은 내부 트랜잭션, 메시지를 의미합니다.

💡 dApp이란 무엇이고 일반적인 어플리케이션과는 무엇이 다른가요?

일반적인 어플리케이션과 다른점은 블록체인과 기존의 DB시스템의 차이라고 설명할수 있을껏 같습니다.

dApp같은 경우에는 블록체인 생태계에 직접적으로 블록으로 저장이 되게 됩니다.

그러기 때문에 무결성이 보장이 되며 자신의 계정이 도난, 해킹 등에 대한 위험이 덜하게 됩니다.

일반적인 어플리케이션은 이와 반대의 장점과 단점을 가지고 있다는 것으로 이해를 하면 될 것 같습니다.

💡 EVM 메모리의 구성요소를 설명해주세요

EVM은 솔리디티를 통해서 들어온 바이트 코드를 받아서 opcode를 실행시켜 생태계의 상태를 바꾸는 역할을 하게 되고 구성요소는 크게 3가지가 있습니다.

[1] 스택

EVM은 들어오는 바이트 코드를 스택 구조로 처리를 하게 됩니다.

[2] 메모리

EVM은 휘발성 메모리를 가지고 있습니다. 마찬가지로 들어오는 바이트 데이터를 배열로 저장을 하게 되고

프로그램이 종료되면 메모리에 들어있는 데이터도 사라지게 됩니다.

[3] 스토리지

비 휘발성 데이터이며 시스템 상태에 따라서 유지가 되게 됩니다.

가상 ROM이라는 공간에 프로그램 코드와 별개로 분리해서 저장을 하게 됩니다.

EVM은 데이터를 받게 되면 메모리와 스택은 반드시 비어있어야 하며 프로그램의 연산 실행 횟수를 0으로 초기화 한뒤 작동하게 됩니다.

💡 스마트 컨트랙트의 실행 비용이 지정된 가스보다 더 많이 소요된다면 무슨 일이 일어나나요?

그만큼 더 많은 가스가 소요되게 됩니다.

아주 단순한것 같습니다. 지정된 가스보다 더 많이 소요되면 그만큼 더 많은 비용을 지불하게 되는 것 입니다.

이러한 이유가 발생하는 원인에 대해서는 잘 알지는 못하지만 만약 거 많은 가스비를 지불할 금액이 트랜잭션은 사라지고 수수료 또한 반환받지 못하는 것으로 알고 있습니다.

💡 트랜잭션에서 가스 사용량은 무엇에 따라 달라지며, 트랜잭션 수수료는 어떻게 계산되나요?

일단 기본적으로 사용자 설정에 따라서 달라지는 것으로 알고 있습니다.

빠르게 처리가 완료되기를 원하면 더 많은 가스비를 사용하면 되고 또한 만약 네트워크가 과부화 상태라면 더 많은 가스비가 들게 됩니다.

트랜잭션 수수료또한 이와 같은 원리로 작동을 하게 됩니다.

profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글