블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256...

25
묶음 강좌명 : 블록체인 12. 블록체인 실습 : ERC 2.0 12-3. 솔리디티 스마트계약 프로그래밍 블록체인응용과 실습

Upload: others

Post on 16-Oct-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

묶음 강좌명 : 블록체인

12. 블록체인 실습 : ERC 2.012-3. 솔리디티 스마트계약 프로그래밍

블록체인응용과 실습

Page 2: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

1. 솔리디티 변수 타입

(불린, 정수, 고정소수점, 어드레스 등)

2. 솔리디티 변수의 값 타입과 레퍼런스 타입

솔리디티 문법의 특징을 익히고 실습할 수 있다.

솔리디티 스마트 계약을 모의상황에

적용할 수 있다.

Page 3: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

1. 솔리디티변수타입(불린, 정수, 고정소수점, 어드레스등)

Page 4: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

Boolean 타입

• 참/진실

• &&/||에 대하여 쇼트-서킷 효과 적용

• !

• &&

• ||

• ==

• !=

출처 박재현외, 코어이더리움프로그래밍, JPub

Page 5: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

integer 타입

• uint8, uint16, uint24, uint32 8비트 단위로 적용 가능

• uint256은 부호 없는 정수

• uint, int는 uint256, int256

고정소수점(Fixed Point Number)

• 선언할 수는 있으나, 할당되지 않음 (0.4.18버전 기준)

출처 박재현외, 코어이더리움프로그래밍, JPub

Page 6: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

어드레스(Address) 타입

• 이더리움 어카운트의 주소, 크기는 20바이트

• 정수의 비교연산(<=, <. ==, !=, >)을 모두 사용할 수 있음

• 어드레스는 어카운트 잔액을 나타내는 balance을 가지고있음

• Transfer, send 함수 호출 가능

출처 박재현외, 코어이더리움프로그래밍, JPub

Page 7: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

어드레스(Address) 타입의속성과함수

bool call(…)

• 임의 컨트랙트에 있는 함수를 호출하고자 할 때 사용

• ether값 지정 가능(address.call.value(1 ether)(…)

Gas값 지정 가능 address.call.gas(100000)(…)

• 주소의 잔액(Wei단위)

uint256 balance 변수

출처 박재현외, 코어이더리움프로그래밍, JPub

Page 8: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

어드레스(Address) 타입의속성과함수

transfer(uint256 amount)

• 주어진 주소로 amount만큼의 Wei를 보냄

• 실패하면 예외를 던짐(2300gas)

bool send(uint256 amount)

• 주어진 주소로 amount만큼의 Wei를 보냄

• 실패하면 false 반환

• 실패 시 처리 로직을 구현할 필요 있음(2300gas 만 발생)

출처 박재현외, 코어이더리움프로그래밍, JPub

Page 9: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

고정크기배열

바이트 배열

• byte1, byte2, byte3, …, byte32의 총 32개 타입

bytesN(1<N<32)에 값 할당

• 문자열 리터럴 또는 헥사 리터럴 사용

출처 박재현외, 코어이더리움프로그래밍, JPub

Page 10: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

고정크기배열

비교연산, 비트연산, 인덱스 접근, 길이 조회(x.length) 연산 가능

출처 박재현외, 코어이더리움프로그래밍, JPub

선언 결과

bytesl bl –‘A’; bl에 아스키(ASCII)코드 A(0x41, 십진수 65)를 할당함

bytesl bl = 0x41; bl에 아스키(ASCII)코드 A(0x41, 십진수 65)를 할당함

bytesl bl = byte(65); bl에 아스키(ASCII)코드 A(0x41, 십진수 65)를 할당함

bytesl bl = ‘AB’; ‘AB’는 2바이트인데, bytes1은 1바이트이기 때문에 오류가발생함(Tybe literal_string “AB” is not implicitly convertible to expected type bytes1.)

bytesl b4 = ‘ABCD’; b4[0]=65, b4[1]=66, b4[2]=67, b4[3]=68을 할당함

if (b4[0] == 65) b4[0]의 값이 십진수 65인지를 검사함

Page 11: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

레퍼런스타입

콤플렉스 타입

• 256 비트 이상이 필요한 타입

• 콤플렉스 타입 지정 시 스토리지와 메모리 데이터 위치를지정할 수 있음(complex type 복사는 비용이 아주 높으므로 위치를 주의)

• 값 타입은 함수가 호출되거나 할당 연산을 수행할 때마다 값이복사되지만, 콤플렉스 타입은 상황에 따라 값 전체가 복사될때도 있고, 값이 복사되지 않고 참조되기만 할 때도 있음

출처 박재현외, 코어이더리움프로그래밍, JPub

Page 12: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

레퍼런스타입

변수의 데이터 로케이션

구분 설명

콜데이터 영역• 메시지 호출 발생시 매개변수를

전달하기 위해서 임시로 생성하는영역

상태변수 • 항상 스토리지에 저장되며, 변경 불가

함수 내 로컬 변수 • 기본 스토리지, 필요 시 메모리 가능

매개변수와 반환값• 기본 메모리, 필요 시 스토리지

변경가능

출처 박재현외, 코어이더리움프로그래밍, JPub

Page 13: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

레퍼런스타입

바이트(bytes) 배열

• 크기가 동적으로 정해짐

• 저장할 데이터 크기를 미리 알 수 없는 경우 사용함

• 초기화 시 new 연산 사용

Eg Bytes memory b = new bytes(10); b.length 사용 가능

출처 박재현외, 코어이더리움프로그래밍, JPub

Page 14: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

레퍼런스타입

문자열

• UTF-8 로 인코딩된 문자열을 저장하기 위한 동적 크기 배열

• 작은따옴표나 큰따옴표를 이용해서 문자열 지정 가능

• 문자열에 \n, \xNN(아스키코드), \uNNNN(유니코드) 형식 사용 가능

• 16진수 문자열인 경우는 hex’48656c6c6f’로 사용함

• 문자열에 대한 다양한 처리함수는 비용관계로 제공하지 않음

• 대신 Dapp 개발 시 자바스크립트 등에서 처리가 가능함

출처 박재현외, 코어이더리움프로그래밍, JPub

Page 15: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

for 반복문

for (초기값 ; 조건식 ; 증감식) {}

for (uint i = 0; I < 1000 ; i++) {

n += (I + 1);

}

출처 박재현외, 코어이더리움프로그래밍, JPub

Page 16: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

while 반복문

while (조건식) {}

do~while 반복문

do { } while (조건식);

출처 박재현외, 코어이더리움프로그래밍, JPub

Page 17: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

break 구문

for (uint i = 0; i < 1000; i++) {

n += (I + 1);

if (n == 5050) {

break;

}

}

출처 박재현외, 코어이더리움프로그래밍, JPub

Page 18: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

continue 구문

for (uint i = 0; I <=10; i++) {

if (I % 3 == 0) {

continue;

}

}

출처 박재현외, 코어이더리움프로그래밍, JPub

Page 19: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

if 조건문

If ( 조건식 A ) {

} else if ( 조건식 B) {

} else {

}

출처 박재현외, 코어이더리움프로그래밍, JPub

Page 20: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

조건식예시

(a > 10 && a < 20), (true), (a <10 || a> 20

삼항조건연산자

myVariable = expression ? ValueT : valueF;

출처 박재현외, 코어이더리움프로그래밍, JPub

Page 21: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

데이터위치에따른할당연산

할당연산발생시원본변수와할당변수에따라복사또는참조로동작함

(로컬스토리지변수는스토리지의변수를가리키는포인터)

출처 박재현외, 코어이더리움프로그래밍, JPub

Page 22: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

데이터위치에따른할당연산

원본변수 할당할 변수 동작

상태변수 로컬 스토리지 변수 참조

상태변수 로컬 메모리 변수 복사

상태변수 상태변수 복사

로컬 스토리지 변수 로컬 스토리지 변수 참조

로컬 스토리지 변수 로컬 메모리 변수 복사

로컬 스토리지 변수 상태 변수 복사

로컬메모리 변수 로컬 스토리지 변수 오류

출처 박재현외, 코어이더리움프로그래밍, JPub

Page 23: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)
Page 24: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

지금까지살펴본중요내용을토대로우리가실습시주의해야할사항은무엇일까요?

Summary

Page 25: 블록체인응용과실습 · 2019. 8. 21. · •uint, int는uint256, int256 고정소수점(Fixed Point Number) •선언할수는있으나, 할당되지않음(0.4.18버전기준)

교수님의견

Summary

비트코인 코어 플랫폼, 명령어• bitcoind 플랫폼 명령어 사용방법 예시

• 비트코인 지갑 주소

이더리움 플랫폼 명령어 사용 방법 및 예시메타마스크 월렛과 이더스캔 사용법

지금까지살펴본중요내용을토대로우리가실습시주의해야할사항은무엇일까요?