솔리디티(Solidity) 는 계약 지향 프로그래밍 언어로, 블록체인 플랫폼의 스마트 계약 로직을 작성할 때 사용된다.
솔리디티의 특징
- 정적 타입 언어
- Ethereum Virtual Machine(EVM) 위에서 실행됨
- 문장의 끝을 세미콜론(;)으로 표현
솔리디티 사용 시 맨 앞에 버전을 선언해주어야 한다.
pragma solidity ^0.4.19;
pragma solidity ^0.4.19;
contract ZombieFactory {
}
모든 코드의 실행은 contract 안에서 실행되어야 한다.
주요 자료형
- uint (부호 없는 정수형)
- int (정수형)
- bool (논리 자료형)
- string (UTF-8 인코딩 문자열)
- bytes (바이트)
- address (이더리움 주소 값)
pragma solidity ^0.4.19;
contract ZombieFactory {
uint a = 16;
}
struct 키워드로 생성할 수 있으며, 컨트랙트 내부에서 정의되어야 한다.
pragma solidity ^0.4.19;
contract ZombieFactory {
uint a = 16;
uint b = a **10;
struct Zombie {
string name;
uint dna;
}
}
솔리디티에는 정적 배열과 동적 배열이 존재
pragma solidity ^0.4.19;
contract ZombieFactory {
uint a = 16;
uint b = a ** 10 ;
struct Zombie {
string name;
uint dna;
}
Zombie[10] zombies; // 좀비 구조체를 저장하는 크기 5의 배열
Zombie[10] public zombies; // 다른 컨트랙트에서도 zombies 배열 사용 가능
uint[] result = new uint[](owenerZombieCount[_owner]); // new int를 활용한 배열 선언
}
(Strage & Memory)
function 키워드를 활용해 함수 생성 가능
→ return 값이 존재하면 returns (리턴해줄 값 ){} 으로 표현 가능
함수 선언 형식
→function 함수이름 (매개변수 1, 매개변수 2 …) returns(리턴값 1, 리턴값 2 …) { return 리턴값;}
pragma solidity ^0.4.19;
contract ZombieFactory {
function createZombie(string _name,uint _dna) {
}
}
함수의 접근자 지정
(Private & Public)
private & public 속성의 접근자로 지정 가능
< 아무것도 명시 하지 않으면 기본적으로 public 속성으로 선언된다.>
pragma solidity ^0.4.19;
contract ZombieFactory {
function createZombie(string _name, uint _dna) private {
}
}
(internal & external)
internal, external 함수 접근 제어자도 존재
contract Zombiefactory{
uint count = 0;
function countZombie() internal {
count ++;
}
}
contract ZombieFeeding is Zombiefactory { // 상속
countZombie();
}
함수의 반환 값 지정
함수가 반환하는 타입(자료형) 을 returns 키워드를 통해 함수 선언부에 명시적으로 드러내야 함
pragma solidity ^0.4.19;
contract ZombieFactory {
function createZombie(string _name, uint _dna) public returns (string) {
return "create";
}
}
함수 제어자 지정
컨트랙트의 변수를 읽고 쓰는지 여부에 따라 제어자 지정
이더리움에서 변수의 상태값을 변화시켜주는 것만으로도 가스 사용료를 낼 수 있기 때문에 함수 제어자를 사용하여 비용 절감을 할 수 있다.
pragma solidity ^0.4.19;
contract ZombieFactory{
function _generateRandomDna(string _str) private pure returns (string) {
}
}
require
조건이 참이면 함수를 실행하고, 참이 아니면 함수를 실행하지 않고 에러를 반환하는 명령문
pragma solidity ^0.4.19;
contract ZombieFactory {
function createZombie(string _name,uint _dna) public returns(string){
require(_name == "좀비"); //들어온 함수 인자값 _name이 좀비이면 참
return "좀비 create";
}
}
값 반환
솔리디티 함수에서는 한번에 여러 값을 반환 받을 수 있다
특정값만 받을 때 , 콤마를 기준으로 두고 받으면 된다
contract ZombieFeeding {
function getKitty(uint256 _id) external view returns (
bool isGestating,
bool isReady,
uint256 cooldownIndex,
uint256 generation,
uint256 genes
);
uint dna;
(,,,,dna) = getKitty(id);
}
참고자료