일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Resources are low on NN
- hadoop safe mode leave
- 이더리움
- hadoop safe mode
- hive beeline 에러
- 카카오 자물쇠와 열쇠
- 자소서 빨리
- 자소서 너무 오래 걸림
- 카카오 2020 코딩테스트
- 이더리움 #ethereum
- code=0)
- 도커 교과서
- mac hadoop
- Failed to connect to localhost:10000
- hive beeline 설정
- Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000
- mac hive 3
- mac hive
- mac hadoop 3
- 자소서 시간 줄이기
- 백준 18428
- 자소서 빨리 쓰는 법
- mac hadoop 설정
- is not allowed to impersonate hive (state=08S01
- 카카오 2020 코테
- mac hadoop 설치
- Safe mode is ON
- hive beeline
- 기업 조사 빨리 하는 법
- hive beeline 실행
- Today
- Total
A seeker after truth
이더리움과 솔리디티 입문(4) - 솔리디티 본문
*본문은 경희대 블록체인 학회원으로서 상반기 동안 블록체인 기초 교육을 이수한 뒤 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의 어떤 솔리디티 스마트 계약에서든 호출할 수 있는 변수로, 언어 자체에 내장되어 있다. 이들 중 대부분은 이더리움 체인에 대한 정보를 반환하며, 시간 단위와 이더 단위도 전역적으로 이용 가능하다.
'Blockchain' 카테고리의 다른 글
이더리움과 솔리디티 입문(6) - 이더 채굴 (0) | 2019.10.11 |
---|---|
이더리움과 솔리디티 입문(5) - 스마트 계약과 토큰 (0) | 2019.10.11 |
이더리움과 솔리디티 입문(3) - EVM (0) | 2019.10.10 |
이더리움과 솔리디티 입문(2) - 미스트 브라우저 (0) | 2019.10.10 |
이더리움과 솔리디티 입문(1) - 블록체인 개론 (0) | 2019.10.10 |