일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 재귀
- C
- 다이어그램
- 알고리즘
- 추상팩토리
- 테트로미노
- FactoryMethod
- 행위패턴
- ps
- c++
- 구조패턴
- 14500
- 반복자
- 어댑터패턴
- AbstractFactory
- 디자인패턴
- 클래스다이어그램
- bfs
- 생성패턴
- 데코레이터패턴
- UML
- 팩토리메소드
- 완전탐색
- 이터레이터
- 백준
- 회전하는큐
- 옵저버
- C언어
- 빌더패턴
- problemsolving
- Today
- Total
salsa source
[이더리움 베이직] Solidity 문법1 본문
자료형
정수형 -> int, uint
연산할 때 자료형을 맞춰주어야 연산 가능함
현재까지 스마트 컨트랙트는 실수형 데이터는 지원하나 자료형은 지원하지 않음
참거짓 -> bool
나열형 -> enum
enum FName {Kim, Park, Lee, Choi}
FName Nah = FName.Kim;
FName Hee = FName.Lee;
FName Jiy = FName.Choi;
FName 안에 선언 된 네 가지 이외에 다른 것을 선언하면 컴파일러가 알려줌
주소형 address
20바이트 크기의 자료형. address 키워드로 선언하며 컨트랙트 주소 저장 시 사용한다.
40자리의 16진수 정수로 표현
기능
1) balance : 해당 지갑이나 컨트랙트의 이더 잔고 조회
2) transfer, send : 해당 지갑이나 컨트랙트로 이더 송금 시 사용. 단위는 Wei(1 wei = 10^-18 ether)
-----------------------------------------------
function exampleAddress() public{
address sender = this;
address recipient = 0xABC;
recipient.transfer(5);
}
-----------------------------------------------
recipient에게 5 wei를 송금하는 코드
송금과정에서 송금이 실패한 경우
transfer -> 즉시 오류를 발생시켜 컨트랙트 실행 취소
send -> 오류를 발생시키지 않고 단지 false만 반환하며 그 뒤 코드는 계속 실행
==> transfer 사용을 권장!
튜플
컴파일 전 미리 정해진 데이터들의 묶음
각 데이터의 자료형은 달라도 괜찮다!!
-----------------------------------------------
function f() public constant returns (int, int){
var (x, y, z) = (1, 2, true);
(x, y) = (y, x);
var (a, b) = (x, y);
return (a, b);
}
-----------------------------------------------
(x, y, z)를 (1, 2, true)로 선언한 뒤
(x, y) = (y, x) 로 둘의 값을 swap함
리턴 값 (a, b)는 (x, y)이므로 (2, 1)인 것을 확인할 수 있다.
함수
함수 형태
function name (x1, x2, ,,, xn) option returns (y1, y2, ,,, yn) {
}
name : 함수의 이름 생략 불가
(x1, x2, ,,, xn) : 입력 매개변수
option : private/public/external/internal, constant, payable
returns (y1, y2,,,,yn) : 출력 매개변수
private/public/external/internal, constant, payable : Visibility (가시성)
private - 함수 내부에서만 접근 가능
internal - 내부와 상속된 컨트랙트에서 접근 가능
external, public - 컨트랙트 밖에서도 접근 가능
(default 값은 public -> 이전 버전에서는 그랬던 것으로 보이나 현재 버전에서는 public 도 명시를 해주어야 컴파일이 된다.)
constant : 상수 함수(수정 불가)로 gas를 소모하지 않음
payable : 지불 가능 함수. 자신의 함수를 통해 다른 지갑이나 컨트랙트에서 이더를 송금받고 싶은 경우
간단한 함수 예시
-----------------------------------------------
function sum(uint a, uint b) returns (uint result){
result = a + b;
}
-----------------------------------------------
-----------------------------------------------
function operating() returns(uint result){
result = sum(5, 10);
}
function sum(uint a, uint b) returns (uint){
uint result = a + b;
return result;
}
-----------------------------------------------
operating()을 실행하면 sum(5, 10)의 값인 15가 반환된다.
생성자
컨트랙트가 생성될 때 딱 한 번만 실행되는 함수로 보통 초기화 세팅에 주로 사용.
생성자는 다음과 같이 사용된다.
function 컨트랙트이름(....){
}
예시
-----------------------------------------------
contract Example4{
uint count;
address from;
address to;
function Example4(uint _count, address _from, address _to){
count = _count;
from = _from;
to = _to;
}
}
-----------------------------------------------
이렇게 생성자를 선언 해 두면
create에 입력 매개변수를 넣어 초기화가 가능하다.
new키워드를 이용해서 컨트랙트가 다른 컨트랙트를 만들 수 있는데 이때도 생성자가 이용된다.
-----------------------------------------------
contract Example4{
uint a;
function Example4(uint _a){
a = _a;
}
}
contract Exampe4Creator{
Example4 e = new Example4(2018);
}
-----------------------------------------------
'STUDY > 블록체인' 카테고리의 다른 글
[이더리움 베이직] Solidity 문법2 (0) | 2018.03.13 |
---|---|
[이더리움 베이직] Remix (0) | 2018.03.13 |
[이더리움 베이직] 컨트랙트 만들기 (0) | 2018.03.13 |
[이더리움 베이직] 이더 송금하기 (0) | 2018.03.13 |
[이더리움 베이직] 새로운 계좌 개설하기 (0) | 2018.03.13 |