스마트컨트랙트 기초

요니·2022년 11월 25일
2

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

비트코인 스크립트는 보안상의 이유로 Opcode를 사용할 수 없게 설계되어있다.

때문에 비트코인에서는 반복문을 사용할 수 없다보니 단순한 스마트 컨트랙트를 만드는데 그쳤다.

반대로 이더리움은 dApp을 만들 수 있도록 튜링 완전한 언어인 솔리디티를 제공하면서 개발자가 원하는 스마트

컨트렉트를 유연하게 구현할 수 있게 되었다.

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

플랫폼 목적 : 이더리움은 evm위에서 스마트 컨트랙트를 실행하기위해 만들어졌고 하이퍼레저는 고성능과 신뢰성을 바탕으로 산업 전반의 협업을 가속하기위해 도입되었다.

작동 방식 : 이더리움은 허가없이 누구나 블록체인 네트워크에 접근할 수 있는 반면 하이퍼레저 패브릭은 허가된 사용자만 네트워크에 참여할 수 있다.

피어 역할 : 이더리움은 피어마다 역할이 있는 반면, 하이퍼레저는 각 피어에게 정보를 제공할 필요가 없는 DLT를 제공한다.

합의 메커니즘 : 이더리움은 모든 노드가 합의에 도달해야하는 POS합의 알고리즘을 사용하고 하이퍼레저 패브릭에서는 아예 합의하지 않거나 다양한 합의 프로토콜 중 하나를 선택할 수 있다.

프로그래밍 언어 : 이더리움은 이더리움의 자체 언어인 솔리디티를 사용하지만, 하이퍼레저에서는 GO언어를 사용합니다.

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

VM: Virtual Machine 가상머신

EVM: 이더리움, EOS VM: 이오스에서 사용하는 VM

개발자가 작성한 코드를 이더리움 블록체인에서 실행될 수 있도록 하는 가상 머신

개발자가 솔리디티로 작성 => 바이트코드로 변환(solc로 컴파일) => EVM이 Opcode단위로 읽음

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

뱅코르 알고리즘은 스마트 컨드랙트 위에서 코인을 거래하는 것이다.

유니스왑을 사용하는 이유는 1. 단순하고 2. 더 빠르고 3. 비용이 적기 때문이다. => 이로 인해 더 많은 유동성 발생

유니스왑의 경우 스마트 컨트랙트로 작동을 하지만

  1. 뱅커와 다르게 자체 토큰이 존재하지 않고 2. 단순한 알고리즘을 사용하게 된다. => 때문에 비용이 저렴

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

동일한 입력값을 넣는다 하더라도, 매번 다른 과정을 거쳐 다른 결과를 도출하는 것을 비결정적 문제라 합니다.

이에 반해, 솔리디티의 경우 튜링 완전성을 가지고 있고 , 모든 노드에서 나온 결과값이 동일하기에 결정적 특성을 가지고 있습니다.

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

트랜잭션이 발생하는 모든 연산에 있어 수수료를 지불하는 방식으로 과금을 구합니다.

이에 따라 연산이 복잡할 경우 채굴자는 더 높은 수수료를 요구합니다.

또한 송신자가 자신의 트랜잭션을 먼저 실행시킬 수 있도록 채굴자에게 수수료를 제공합니다.

요약하면 1) 채굴자에게 주는 수수료 2) 트랜잭션에 드는 연산에 대한 수수료 로 구성되어 있습니다.

Solidity 처럼 C++이나 Go로 만든 프로그램에서 CPU, Memory, Storage 를 사용한 만큼의 지표를 구하고 싶을 때 어떻게 할 수 있을까요?

가상 메모리 상태와 레지던트 세트 크기로 CPU, Memory, Storage 사용량을 구할 수 있다.

런타임에 가상메로리 사용량, 레지던트 세트 크기 등과 같은 메모리 사용량을 얻을 수 있다.

(일부 시스템 라이브러리를 사용할 수 있음)

C++의 경우 "/proc/self/stat" 폴더에서 모든 세부 정보를 얻을 수 있다.

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

다른 프로그래밍 언어로 작성된 프로그램과 달리 스마트 계약 코드는 타이머나 이벤트(event) 등을 통해서 실행되지 못한다. 예를 들어, 특정 시간에 특정 주소로 자동으로 송금하는 프로세스 등은 구현할 수 없다. 왜냐하면 스마트 컨트랙트는 자기 자신의 개인키(private key)가 없기 때문에 스스로 어떤 트랜잭션도 발생시킬 수 없기 때문이다.

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

단일 마이그레이션 파일에서 둘 이상의 스마트 계약을 배포할 수 있다.

Truffle 마이그레이션은 계약, 라이브러리, 인수 전달을 연결하기 위해 정확히 이루어진다.

계약이 상호 작용할 필요가 없는 경우 각각에 대해 서로 다른 마이그레이션 파일을 갖는 것이 유용하다.

그중 하나만 변경한 경우 변경되지 않은 코드를 재배포하지 않고 특정 마이그레이션을 개별적으로 실행할 수 있다.

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

if or when (이벤트 x가 실행되면)


		액션 y를 실행하라  // 계약 이행

		}

코드가 블록체인 네트워크에 올라가면, 네트워크는 미리 결정된 조건이 충족되고,

검증된 경우 조건에 따른 액션을 실행

코드에 따라 계약이 실행 됨을 보장하는 결정론적인 상태(Deterministic State)인 다자간 디지털 계약이 바로 스마트 컨트랙트이다.

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

일반적인 어플리케이션: 중앙서버

디앱: 탈중앙화됨. 블록체인 생태계에 직접적으로 블록으로 저장됨

장점: 보안성 및 투명성, 인센티브, 거버넌스 참여

단점: 느린 속도, 높은 비용

EVM 메모리의 구성 요소가 어떻게 되나요?

1) 스택: EVM은 들어오는 바이트코드를 스택구조로 처리함

2) 메모리: 휘발성. 들어오는 데이터를 배열로 저장하고 프로그램이 종료되면 메모리에 있는 데이터도 사라짐

3) 스토리지: 비휘발성, 시스템 상태에 따라서 유지. 가상 ROM이라는 공간에 코드와 별개로 분리해서 저장

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

사용자의 경우 트랜잭션을 실행하기 전 가스한도를 설정해둔다. (지정된 가스). 지정된 가스보다 스마트 컨트랙트 실행비용이 높은 경우, 즉 한도를 낮게 설정한 경우 트랜잭션 연산을 완벽히 마치지 못하게 되고 트랜잭션을 실패한다. 또한 그 시점까지 사용된 수수료는 환불받지 못한다.

이에 따라 스마트 컨트랙트 실행비용에 대한 추측이 필요하며, 추측값보다 한도를 높이 설정해둔다면 트랜잭션을 마치더라도 남는 이더는 환불 받을 수 있을 것이다.

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

가스 사용량은 트랜잭션을 처리할 때 드는 비용이다.

이더리움은 공격자들의 공격을 방지하기 위해 트랜잭션 처리하는 데에 수수료를 부과한다.

수수료 계산 원리 : 트랜잭션 크기에 따라 결정 (클수록 많은 수수료 소요, 작을수록 적은 수수료 소요)

0.000000001ETH = 1 Gwei(10억 Gwei = 1 ETH)

가스비는 이더리움 채굴자들이 채굴에 대한 보상으로 가져감

profile
개발자가 될래요

0개의 댓글