관리 메뉴

A seeker after truth

이더리움과 솔리디티 입문(4) - 솔리디티 본문

Blockchain

이더리움과 솔리디티 입문(4) - 솔리디티

dr.meteor 2019. 10. 11. 00:05

*본문은 경희대 블록체인 학회원으로서 상반기 동안 블록체인 기초 교육을 이수한 뒤 2019년 7월 경 <이더리움과 솔리디티 입문>(위키북스,2018) 을 읽으며 문서에 메모한 내용을 옮겨온 것입니다.

*소웨 = 소프트웨어, 하웨 = 하드웨어, 플밍 = 프로그래밍, 데베 = 데이터베이스, 컴터 = 컴퓨터, 컴과 = 컴퓨터 과학, 알고 = 알고리즘, 컴네 = 컴퓨터 네트워크 의 줄임말입니다.

 

 

이 언어는 네트워킹, 어셈블리 언어와 웹 개발이 결합된 복잡한 규칙을 갖고 있다.

동적 메모리는 힙(heap)이라고도 불리며, 무한히 확장 가능한 바이트 배열을 말한다. 동적 메모리는 프로그램이 끝나면 리셋된다.

/값 저장소는 계정 잔고를 보관하며, 스마트 계약 계정의 경우 솔리디티 코드도 보관한다. 솔리디티 스마트 계약은 들어오는 메시지의 값, 발신자 및 데이터뿐만 아니라, 블록 헤더의 데이터와 같은 메시지의 특정 속성에 접근할 수 있다.

 

 

1)    대안 화폐

대안화폐란 용어는 법정 화폐가 충족할 수 없는 수요를 충족시키며, 법정 화폐와 함께 사용할 수 있는 교환 매체를 의미한다. 이는 일반적으로 다음과 같은 목적을 지닌다.

-      소규모 공동체 내에서 지역 경제 발전 촉진

-      소규모 공동체에 사회적 자본 구축

-      지속 가능한 생활 양식 양성

-      주류 화폐가 충족시키지 못하는 수요를 충족

솔리디티 플밍을 사용하면 누구나 간단한 토큰 계약 작성을 통해 대안 화폐를 만들 수 있다.

솔리디티를 테스트하는 가장 일반적인 방법은 브라우저 기반 컴파일러를 사용하는 방법. 114쪽 보면 주소 나옴

기존 웹 어플에선 네트워크를 통해 데이터를 주고받고 공유하는 데베를 지닌 많은 개별 서버가 있다. 이 데이터는 다른 서버에 있는 어플에서 조작이 가능하다

스마트 계약은 분산형 어플의 특성을 갖고 있지만, 그럼에도 분산 어플 즉 Dapp과는 개념이 다르다. 댑은 기존 데베와 웹 앱 호스팅 제공업체 대신 백엔드서 이더리움 스마트 계약을 사용하는 GUI 어플이다. 댑에는 미스트 브라우저 또는 웹을 통해 접근할 수 있다.

EVM은 블록당 계산 단계 수, 결정론적 언어 및 가스 비용에 대한 엄격한 제한을 포함해 다양한 방식으로 현실적인 위험 요소(네트워크 해킹 등)를 극복한다.

해킹의 예로, 메모리를 집중적으로 소모시키는 스마트 계약을 작성하고 이를 통해 EVM을 마비시킬 수 있다.

 

 

2)    구조를 위한 자동화된 증명

문지기를 만들어 나쁜 프로그램을 차단할 순 없지만, 기계를 통한 증명으로 올바른 프로그램을 만드는 것이 실현 가능해지는 추세다. , 다른 프로그램을 수학적으로 증명하는 자동화된 프로그램을 이용하는 것이다.

스마트 계약은 돈을 움직이기 때문에, 자동화된 수학적 증명을 테스트하기 위한 훌륭한 플랫폼이다. 자동화 증명은 수학 및 컴과 연구 영역의 한 분야이기도 한데, 그 목표는 소스코드가 특정 형식 사양을 충족하는지 체계적인 방법으로 확인하는 것이다. 독립적인 감시자들이 이 일을 수행한다. 그러나, 증명을 통해 알 수 있는 것은 단순히 프로그램에서 실제로 의도했던 것이 실제로 발생했는지 여부다. 프로그램이 증명되지 않으면, 자동화된 시스템이 이를 개선할 방법을 알려줄 수 없다.

결국 실세계에서 공용 시스템을 설계할 때 튜링 완전성에 대한 개념 자체가 실용성이 제한된 이상적인 개념이다. 오늘날 스마트 계약은 수학적으로 증명 가능하지만, 컴파일 이후에 증명이 가능할지는 여전히 확실할 수 없다.

 

이더의 송수신, 토큰 추적 및 계약 배포는 모두 미스트 지갑에서 사용할 수 있다. 하지만 댑 작성을 배우기 위해서는 Geth(커맨드 라인 클라이언트)가 더 좋은 선택이다.

솔리디티에서 간단한 계약을 배포하기 위한 요구 사항은 3가지이다.

-      맥os의 textedit, 우분투의 gedit, 윈도우 메모장 같은 텍스트 편집기. 일반 텍스트 모드로 작성.

-      미스트 지갑

-      브라우저형 솔리디티 컴파일러

솔리디티는 자스와 문법이 유사함.

컴퓨터는 계산의 값을 저장할 메모리가 얼마나 필요한지 즉각적으로(temporary) 또는 동적으로(dynamic) 알아낼 것이다. 예를 들어, if-then과 같이 작고 중요한 논리문에 따라 필요한 메모리가 달라질 수 있다. 메모리를 잡아먹는 프로그램의 위험성을 피하려면 스택과 힙의 정의를 알아야 하며, 컴퓨터가 여분의 것보다 더 많은 동적 메모리를 사용하도록 요청하는 상황을 파악해야 한다. 솔리디티는 완전 초창기 컴퓨터, 그러니까 달부터 지구까지의 거리 따위를 계산할 때 쓰던 시절과 비슷하다.

값을 출력하는 함수를 표현식 함수(expression func)라고 한다. 표현식은 하나의 유형 또는 다른 값으로 평가되므로 프로그래밍에서 값 대신 사용할 수 있다. 그 밖의 다른 함수는 선언식(declarative)이며, 메모리에 전용 공간을 생성해 함수의 루틴을 실행할 때마다 사용하게 된다.

자스와 솔리디티는 각 명령문 끝에 세미콜론을 사용해 명령문의 종결을 알리고 뒤에 다른 명령문이 올 것이라고 컴퓨터에게 알릴 수 있다.

Ex) function first(); function second()

퍼블릭: 외부 및 내부에서 볼 수 있다(저장 및 상태 변수에 대한 접근자 함수가 만들어짐)

프라이빗: 현재의 계약에서만 볼 수 있다(기본값). 해당 계약 외부에서 접근할 수 없게 된다.

주소는 20바이트. 실제 이더 주소는 40자의 16진수 또는 160비트이다. 주소 자료형은 멤버 자료형을 갖고 있다. 아예 주소 자료형이 있나 보군…

주소의 멤버(balance, transfer)를 사용하면 계정 잔액을 확인하거나 계정으로 이더를 전송할 수 있다. 스마트 계약으로 이더를 전송할 땐 주의가 필요하다. 스마트 계약을 통해서만 이더를 이전하는 것보단 수취인이 직접 인출할 수 있는 패턴을 사용하는 것이 바람직하다.

일반적으로 솔리디티 자료형에는 EVM 스토리지의 256비트 메모리가 할당된다. 문자로는 2048자에 해당한다. 더 많은 메모리를 점유하는 자료형은 더 많은 가스 비용을 초래할 수 있으므로, EVM의 스택에 영구 저장소를 할당할 때는 신중한 선택이 필요하다. 256비트를 넘는 메모리를 차지하는 복합 자료형은 아래와 같다.

배열, 배열 리터럴/인라인 배열, 구조체,

배열, 구조체, 기타 복합 유형에는 데이터 위치가 포함되어 있어 솔리디티 프로그래머가 데이터를 메모리에 동적으로 저장할지 여부를 조절할 수 있다. 이렇게 하면 수수료를 관리하는 데 도움이 된다.

전역 특수 변수는 EVM의 어떤 솔리디티 스마트 계약에서든 호출할 수 있는 변수로, 언어 자체에 내장되어 있다. 이들 중 대부분은 이더리움 체인에 대한 정보를 반환하며, 시간 단위와 이더 단위도 전역적으로 이용 가능하다.